git学习:php
经常使用 Git 命令清单:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
html
Git远程操做详解:http://www.ruanyifeng.com/blog/2014/06/git_remote.html
git
Git 工做流程:http://www.ruanyifeng.com/blog/2014/06/git_remote.html
github
git与svn的区别:npm
git分布式,本地就可作版本管理vim
svn必须依托远程仓库作版本控制weex
gitlab分布式
git使用流程图:svn
配置信息 gitlab
#全局用户信息 git config --global user.name [用户名] git config --global user.email [邮箱] # 显示当前的Git配置 $ git config --list # 编辑Git配置文件 $ git config -e [--global]
查看全局config:cd ~ -> cat .gitconfig
查看当前仓库config :cd .git -> cat config 示例:
注:通常不手动更改config内容
git命令可用 && 链接, 并列执行
主干发布,分支开发
建立仓库:
# 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init [project-name] # 下载一个项目和它的整个代码历史,[别名]可省略,默认名与远程仓库相同 $ git clone [url] [别名]
增长/删除文件
# 添加指定文件到暂存区 $ git add [file1] [file2] ... # 添加指定目录到暂存区,包括子目录 $ git add [dir] # 添加当前目录的全部文件到暂存区 $ git add . # 添加每一个变化前,都会要求确认 # 对于同一个文件的多处变化,能够实现分次提交 $ git add -p # 删除工做区文件,而且将此次删除放入暂存区 $ git rm [file1] [file2] ... # 中止追踪指定文件,但该文件会保留在工做区 $ git rm --cached [file] # 更名文件,而且将这个更名放入暂存区 $ git mv [file-original] [file-renamed]
代码提交
# 提交暂存区到仓库区 $ git commit -m [message] # 提交暂存区的指定文件到仓库区 $ git commit [file1] [file2] ... -m [message] # 提交工做区自上次commit以后的变化,直接到仓库区 $ git commit -a # 提交时显示全部diff信息 $ git commit -v # 使用一次新的commit,替代上一次提交 # 若是代码没有任何新变化,则用来改写上一次commit的提交信息 $ git commit --amend -m [message] # 重作上一次commit,并包括指定文件的新变化 $ git commit --amend [file1] [file2] ...
分支管理:
#查看本地当前分支 $ git branch #查看全部分支 $ git branch -a #查看远程分支 $ git branch -r #建立新分支 ,建议分支名规范:[项目名]-[日期]-[建立人]-[修改内容] #如:lagou-20171016-yangpeng-bugfix $ git branch [分支名] #切换分支 $ git checkout [分支名] #建立并切换分支 $ git checkout -b [分支名]
#取远程分支并分化一个新分支
$ git checkout -b test origin/master
# 合并指定分支到当前分支,通常在master上操做(须要有管理员权限) #默认使用当前分支与 [branch] 合并,合并指定分支到当前分支 $ git merge [branch]
# 合并其余分支的某个文件到当前分支
$ git merge --patch [branch] [file.name]
$ git merge -p [branch] [file.name] # 切换到上一个分支 $ git checkout - # 创建追踪关系,在现有分支与指定的远程分支之间 $ git branch --set-upstream [branch] [remote-branch] # 选择一个commit,合并进当前分支 $ git cherry-pick [commit] # 删除分支 $ git branch -d [branch-name] #强制删除分支 $ git branch -D [branch-name] # 删除远程分支 $ git push origin --delete [branch-name] $ git branch -dr [remote/branch]
远程同步:
# 下载远程仓库的全部变更 $ git fetch [origin]# 显示全部远程仓库 $ git remote -v # 显示某个远程仓库的信息 $ git remote show [remote] # 增长一个新的远程仓库,并命名 $ git remote add [shortname] [url] # 取回远程仓库的变化,并与本地分支合并 $ git pull [remote] [branch] # 上传本地指定分支到远程仓库 (注:先执行git fetch [origin] ,) #(注:分支提交前首先先创建联系 git branch --set-upstream [branch] [remote-branch] # 务必先与master合并 git checkout master ,git pull ,git checkout [当前分支], git merge [master] ..) $ git push [remote] [branch] # 强行推送当前分支到远程仓库,即便有冲突 $ git push [remote] --force # 推送全部分支到远程仓库 $ git push [remote] --all
标签:主要标识某次提交(适用场景如:给项目各个测试阶段加标签,灰度测试、beta测试(b tag),release (R tag))
# 列出全部tag $ git tag # 新建一个tag在当前commit $ git tag [tag] # 新建一个tag在指定commit $ git tag [tag] [commit] # 删除本地tag $ git tag -d [tag] # 删除远程tag $ git push origin :refs/tags/[tagName] # 查看tag信息 $ git show [tag] # 提交指定tag $ git push [remote] [tag] # 提交全部tag $ git push [remote] --tags # 新建一个分支,指向某个tag $ git checkout -b [branch] [tag]
查看信息
# 显示有变动的文件 $ git status # 显示当前分支的版本历史 $ git log # 显示commit历史,以及每次commit发生变动的文件 $ git log --stat # 搜索提交历史,根据关键词 $ git log -S [keyword] # 显示某个commit以后的全部变更,每一个commit占据一行 $ git log [tag] HEAD --pretty=format:%s # 显示某个commit以后的全部变更,其"提交说明"必须符合搜索条件 $ git log [tag] HEAD --grep feature # 显示某个文件的版本历史,包括文件更名 $ git log --follow [file] $ git whatchanged [file] # 显示指定文件相关的每一次diff $ git log -p [file] # 显示过去5次提交 $ git log -5 --pretty --oneline # 显示全部提交过的用户,按提交次数排序 $ git shortlog -sn # 显示指定文件是什么人在什么时间修改过 $ git blame [file] # 显示暂存区和工做区的差别 $ git diff # 显示暂存区和上一个commit的差别 $ git diff --cached [file] # 显示工做区与当前分支最新commit之间的差别 $ git diff HEAD # 显示两次提交之间的差别 $ git diff [first-branch]...[second-branch] # 显示今天你写了多少行代码 $ git diff --shortstat "@{0 day ago}" # 显示某次提交的元数据和内容变化 $ git show [commit] # 显示某次提交发生变化的文件 $ git show --name-only [commit] # 显示某次提交时,某个文件的内容 $ git show [commit]:[filename] # 显示当前分支的最近几回提交 $ git reflog
撤销
# 恢复暂存区的指定文件到工做区 $ git checkout [file] # 恢复某个commit的指定文件到暂存区和工做区 $ git checkout [commit] [file] # 恢复暂存区的全部文件到工做区 $ git checkout . # 重置暂存区的指定文件,与上一次commit保持一致,但工做区不变 $ git reset [file] # 重置暂存区与工做区,与上一次commit保持一致 $ git reset --hard # 重置当前分支的指针为指定commit,同时重置暂存区,但工做区不变 $ git reset [commit] # 重置当前分支的HEAD为指定commit,同时重置暂存区和工做区,与指定commit一致 $ git reset --hard [commit] # 重置当前HEAD为指定commit,但保持暂存区和工做区不变 $ git reset --keep [commit] # 新建一个commit,用来撤销指定commit # 后者的全部变化都将被前者抵消,而且应用到当前分支 $ git revert [commit] # 暂时将未提交的变化移除,稍后再移入,(适用:将本次未提交的内容悬挂,切换分支工做完后,在切回当前分支) $ git stash $ git stash pop
submodule
# 新增submodule git submodule add git@github.com:lib.git <local path> # 初始化submodule git submodule init # 更新submodule git submodule update # 修改submodule后必须经过submodule命令提交后才能 # 同步到主工程中,不然git submodule update拉取的还是以前的commit head git push --recurse-submodules=on-demand
submodules的命令很长,为提高效率,能够建立alias,记录在.git/config路径下。以下:
git config alias.spush 'push --recurse-submodules=on-demand' git config alias.supdate 'submodule update --remote --merge'
查看某次提交(commit)修改内容( git diff):
共同开发:
一、项目settings
二、collaboration,输入在github上的用户名,则该用户会收到邀请邮件,接受邀请后
三、权限管理(默认成员具备全部权限),protect branchtian
本地同步remote上的新分支,须要本地新建该分支,而后进入该分支 进行 git pull
git init git remote add origin git@git.oschina.net:flqbestboy/js-1024.git git add . git commit -m "first commit" git pull --rebase origin master git push -u origin master
Git之忽略文件(ignore file):http://blog.csdn.net/benkaoya/article/details/7932370
github上发布项目(只纯网页):
新建项目:[项目名].github.io
项目settings
github pages
直接访问[项目名].github.io
可能出现的错误:
错误一:本地master未与远程master关联(虽然添加了远程关联库但未关联master)
解决:
git push --set-upstream origin master
错误二:
There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with git branch --set-upstream master origin/<branch>
解决方案:
git branch --set-upstream master origin/master
fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
解决方案:
git branch --set-upstream-to=origin/master master
错误三: fatal: Unable to create 'F:/HbuilderProject/projectModel/.git/index.lock': File exists.
解决:执行rm -f .git/index.lock (或者rm -f git/index.lock) 删除后正常
错误四:
解决方案:
一、http://blog.csdn.net/huahua78/article/details/52330792
二、。。20171024 github 被墙,改用码云
错误五:
一、未初始化git, git init
二、没有进入git clone 后的目录
错误六:
➜ weex-project git:(release-1.0.4) ✗ git add . fatal: Unable to create '/Users/linqiang/Documents/workplace/weex-project/.git/index.lock': File exists. Another git process seems to be running in this repository, e.g. an editor opened by 'git commit'. Please make sure all processes are terminated then try again. If it still fails, a git process may have crashed in this repository earlier: remove the file manually to continue.
解决:
cd .git
rm index.lock
问题
1.修改远程仓库
方法有三种:
1.修改命令
git remote set-url origin [url]
例如:git remote set-url origin gitlab@gitlab.chumob.com:php/hasoffer.git
2.先删后加
git remote rm origin
git remote add origin [url]
3.直接修改config文件
问题:多人开发时,一人删除了一些无用的tag,push到远程仓库后,另外一人pull下来后,使用git tag 1.10.8, git push -tags,后远程仓库又从新出现已经删除的tags
缘由:彷佛git目前也没有提供一个直接的命令和参数选项能够删除本地的在远程已经不存在的tag
解决方案:远程回退到原版,而后本地
#删除全部本地tag git tag -l | xargs git tag -d #从远程仓库中从新拉取tag git pull
为了不以后再次出现这种状况,建议每次提交tag时不使用提交全部的tags命令: git push -tags ,而使用仅提交当前标注到tag命令: git push origin V-1.02.003 ,此外应当给当前tag添加附注 git tag -a V-1.02 -m “版本1.02”
码云上简易的命令行入门教程:
咱们强烈建议全部的git仓库都有一个README, LICENSE, .gitignore文件
Git 全局设置:
git config --global user.name "flqbestboy" git config --global user.email "962358354@qq.com"
建立 git 仓库:
mkdir test cd test git init touch README.md git add README.md git commit -m "first commit" git remote add origin git@gitee.com:flqbestboy/test.git git push -u origin master
已有项目?
cd existing_git_repo git remote add origin git@gitee.com:flqbestboy/test.git git push -u origin master
自定义快捷命令
mac环境下vim ~/.zshrc, 添加自定义便可,例以下
# user defined alias alias work='cd ~/Documents/workplace && ls' alias gt='git add . ' alias gl='git pull' alias gh='git push' alias gs='git status' alias dev='npm run dev' alias build='npm run build' alias push='git add . && git commit -m "bugfix" && git pull && git push'