Git命令索引
2015-12-31 10:44
155 查看
Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能。Git有很多优势,其中之一就是远程操作非常简便。本文从初学者的角度出发,对需要用到的git命令按用到的顺序进行了一一列举。 目录如下:
克隆版本库
远程仓库
分支的查看、创建、切换
分支的删除
远程分支的拉取及合并
代码的提交
未提交代码的撤销、修改
已提交代码的回退
已 push 代码的回退
标签
一、克隆版本库
远程操作的第一步,通常是从远程主机克隆一个版本库,这时就要用到git clone命令。
该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。
git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。
SSH协议还有另一种写法。
克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。
上面命令表示,克隆的时候,指定远程主机叫做ABCDE。
二、远程仓库
要查看当前配置有哪些远程仓库,可以用 git remote 命令,它会列出每个远程库的简短名字.在克隆完某个项目后,至少可以看到一个名为 origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库。若想列出详细信息,在每一个远程仓库的名字后面列出其远程url,可使用参数v。
想查看远程主机origin的详细信息时,使用如下命令:
想添加远程主机时,使用如下命令:
想删除远程主机时,使用如下命令:
rename命令可对远程主机进行改名,
三、分支的查看、创建、切换
列出本地已经存在的分支,并且在当前分支的前面加“*”号标记。
查看远程分支,使用参数-r。
查看本地所有分支,还本地分支和远程分支,使用参数-a。
创建一个新的本地分支
需要注意,此处只是创建分支,不进行分支切换。若要创建一个新的本地分支并进行分支切换,使用如下命令,
切换分支
四、分支的删除
删除某一本地分支,可用branch命令加参数-D及对应分支名。
删除远程分支
移除在远程仓库已被删除的远程分支,
下面的命令也可达到同样的效果。
五、远程分支的拉取及合并
如果要拉取某个远程仓库的分支到本地,并建立追踪(tracking)关系,且拉取后自动切换到该分支上,可使用checkout命令加参数-t,
git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。
所取回的更新,在本地主机上要用”远程主机名/分支名”的形式读取,比如origin主机的master,就要用origin/master读取。
分支合并git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
如果略去远程主机名,则默认远程主机名为“orgin”。如果当前分支与远程分支存在追踪关系,连分支名都可以略去。还是,略去远程分支名,会默认把“远程主机名/分支名”合并到“分支名”去。
git merge的基本用法为把一个分支合并到现在的分支上。git pull其实就是相当于执行git fetch后再执行git merge。
git merge带上-no-ff参数时,表示哪怕被合并分支处于当前分支的上游,也不使用fastforward模式(fastforward表示简单移动指针),而是生成新的commit,并附有默认的commit message“Merge branch ‘origin/<分支名>’”。建议使用-no-ff模式,这样可以保留被合并分支提交历史的完整性。
git merge是把某个分支的代码合并到当前分支上,形成一个新的提交,而git rebase则是将当前分支的修改添加到某个分支上,形成新的一系列提交,使得当前分支处于被合并分支的上游。
注意,使用rebase,可使得被合并分支的提交历史更加整洁,并保持在一条直线上,但当前分支的每一次待合并的提交都可能与被合并分支产生冲突,可能需要解决多次冲突,merge则没有这个问题,最多只需要解决一次冲突。
六、代码的提交
对代码进行改动后,可使用add命令将修改的代码放入index区域。如果想将当前目录下的所有修改加入到index区域,可使用如下命令。
也可单独将某一文件加入到index区域。
如果想对文件上的修改进行部分添加,可使用-p参数。
将文件名替换成路径,可一次性添加某一路径下的所有修改。
将index区域的所有修改提交到版本库,可使用如下命令提交代码。
若使用-a参数,则无需使用add命令,会将所有修改全部提交。
git push命令用于将本地分支的更新,推送到远程主机,它的格式如下。
如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
如果是需要创建同名的远程分支,可使用-u选项,以后就会自动建立对应的追踪关系,不需要再指明推送到哪个远程仓库的哪个分支上去了。
还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用–all选项。
七、未提交代码的撤销、修改
当你的修改还没提交到远程的中央仓库,且还没有加入了index区域时,可使用checkout来回滚代码。
或者可以直接回滚当前目录下的所有修改。
若当前修改已加入到index区域,则可使用以下命令将当前目录下的所有修改移出index区域。
到这一步之后,使用上面提到git checkout就可以解决问题了。
修改已提交后,如果想对最后一次提交进行补救,可使用下面的命令。此时,index区域的文件会被补充到最后一次提交上去,并且可以修改最后一次提交的message。
八、已提交代码的回退
如果想恢复到之前的commit作为一个新的commit。
恢复到三个提交之前的代码状态,使用如下命令,其中数字3省略时默认为1。
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。譬如,撤销之前的2个提交,同样2可省略,默认为1。
如果git reset带上soft参数,表示只回退commit信息,保留修改内容到index暂存区,若带上hard参数,则表示抛弃修改,彻底回退至某个版本。如:
九、已 push 代码的回退
当代码已被 push 到远程服务器时,可先按方法八把本地分支的代码撤回,对于非默认的分支(非 master 分支),可先在远程服务器删除该分支,再把本地分支重新推上去。
对于 master 分支,无法直接删除远程分支,可使用强推的方法,即利用强覆盖方式用你本地的代码替代git仓库内的内容。
删除远程分支需万分谨慎,要提前做好备份,并知会团队其他成员,确保没有其他成员有关于该分支的未提交、push 的修改。
十、标签
git标签分为两种类型:轻量标签和附注标签。轻量标签是指向提交对象的引用,附注标签则是仓库中的一个独立对象。
列出所有标签
如果想查看某个标签的具体信息,可以使用show命令,带上标签名。
创建轻量标签
创建附注标签
删除本地标签
删除远程标签
切换到打下某一标签时的代码
通常的git push不会将标签对象提交到git服务器,我们需要进行显式的操作,如指定标签名将对应标签提交到git服务器。
也可将本地所有标签一次性提交到git服务器。
克隆版本库
远程仓库
分支的查看、创建、切换
分支的删除
远程分支的拉取及合并
代码的提交
未提交代码的撤销、修改
已提交代码的回退
已 push 代码的回退
标签
一、克隆版本库
远程操作的第一步,通常是从远程主机克隆一个版本库,这时就要用到git clone命令。
$ git clone <版本库的网址>
该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。
$ git clone <版本库的网址> <本地目录名>
git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。
$ git clone http[s]://example.com/path/to/repo.git/ $ git clone ssh://example.com/path/to/repo.git/ $ git clone git://example.com/path/to/repo.git/ $ git clone /opt/git/project.git $ git clone file:///opt/git/project.git $ git clone ftp[s]://example.com/path/to/repo.git/ $ git clone rsync://example.com/path/to/repo.git/
SSH协议还有另一种写法。
$ git clone [user@]example.com:path/to/repo.git/
克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。
$ git clone -o ABCDE https://github.com/ABCDE/projectName.git $ git remote ABCDE
上面命令表示,克隆的时候,指定远程主机叫做ABCDE。
二、远程仓库
要查看当前配置有哪些远程仓库,可以用 git remote 命令,它会列出每个远程库的简短名字.在克隆完某个项目后,至少可以看到一个名为 origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库。若想列出详细信息,在每一个远程仓库的名字后面列出其远程url,可使用参数v。
$ git remote -v origin git@github.com:UserName/ProjectName.git (fetch) origin git@github.com:UserName/ProjectName.git (push)
想查看远程主机origin的详细信息时,使用如下命令:
$ git remote show origin * remote origin Fetch URL: git@github.com:UserName/ProjectName.git Push URL: git@github.com:UserName/ProjectName.git HEAD branch: master Remote branches: branch tracked master tracked Local branch configured for 'git pull': master merges with remote master Local refs configured for 'git push': branch pushes to branch (up to date) master pushes to master (up to date)
想添加远程主机时,使用如下命令:
$ git remote add <主机名> <网址>
想删除远程主机时,使用如下命令:
$ git remote rm <主机名>
rename命令可对远程主机进行改名,
$ git remote rename <原主机名> <新主机名>
三、分支的查看、创建、切换
列出本地已经存在的分支,并且在当前分支的前面加“*”号标记。
$ git branch
查看远程分支,使用参数-r。
$ git branch -r
查看本地所有分支,还本地分支和远程分支,使用参数-a。
$ git branch -a
创建一个新的本地分支
$ git branch <分支名>
需要注意,此处只是创建分支,不进行分支切换。若要创建一个新的本地分支并进行分支切换,使用如下命令,
$ git checkout -b <分支名>
切换分支
$ git checkout <分支名>
四、分支的删除
删除某一本地分支,可用branch命令加参数-D及对应分支名。
$ git branch -D <分支名>
删除远程分支
$ git push <远程主机名>:<远程分支名>
移除在远程仓库已被删除的远程分支,
$ git remote prune origin
下面的命令也可达到同样的效果。
$ git fetch -p
五、远程分支的拉取及合并
如果要拉取某个远程仓库的分支到本地,并建立追踪(tracking)关系,且拉取后自动切换到该分支上,可使用checkout命令加参数-t,
$ git checkout -t <远程主机名>/<分支名>
git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。
$ git fetch <远程主机名> <分支名>
所取回的更新,在本地主机上要用”远程主机名/分支名”的形式读取,比如origin主机的master,就要用origin/master读取。
分支合并git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。
$ git pull <远程主机名> <远程分支名>:<本地分支名>
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
$ git pull <远程主机名> <远程分支名>
如果略去远程主机名,则默认远程主机名为“orgin”。如果当前分支与远程分支存在追踪关系,连分支名都可以略去。还是,略去远程分支名,会默认把“远程主机名/分支名”合并到“分支名”去。
$ git pull
git merge的基本用法为把一个分支合并到现在的分支上。git pull其实就是相当于执行git fetch后再执行git merge。
$ git merge <分支名>
git merge带上-no-ff参数时,表示哪怕被合并分支处于当前分支的上游,也不使用fastforward模式(fastforward表示简单移动指针),而是生成新的commit,并附有默认的commit message“Merge branch ‘origin/<分支名>’”。建议使用-no-ff模式,这样可以保留被合并分支提交历史的完整性。
git merge是把某个分支的代码合并到当前分支上,形成一个新的提交,而git rebase则是将当前分支的修改添加到某个分支上,形成新的一系列提交,使得当前分支处于被合并分支的上游。
$ git rebase <分支名>
注意,使用rebase,可使得被合并分支的提交历史更加整洁,并保持在一条直线上,但当前分支的每一次待合并的提交都可能与被合并分支产生冲突,可能需要解决多次冲突,merge则没有这个问题,最多只需要解决一次冲突。
六、代码的提交
对代码进行改动后,可使用add命令将修改的代码放入index区域。如果想将当前目录下的所有修改加入到index区域,可使用如下命令。
$ git add .
也可单独将某一文件加入到index区域。
$ git add <文件名>
如果想对文件上的修改进行部分添加,可使用-p参数。
$ git add -p <文件名>
将文件名替换成路径,可一次性添加某一路径下的所有修改。
$ git add <路径>
将index区域的所有修改提交到版本库,可使用如下命令提交代码。
$ git commit -m “commit messages”
若使用-a参数,则无需使用add命令,会将所有修改全部提交。
git push命令用于将本地分支的更新,推送到远程主机,它的格式如下。
$ git push <远程主机名><本地分支名>:<远程分支名>
如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
$ git push <远程主机名>
如果是需要创建同名的远程分支,可使用-u选项,以后就会自动建立对应的追踪关系,不需要再指明推送到哪个远程仓库的哪个分支上去了。
$ git push -u <远程主机名> <分支名>
还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用–all选项。
$ git push --all <远程主机名>
七、未提交代码的撤销、修改
当你的修改还没提交到远程的中央仓库,且还没有加入了index区域时,可使用checkout来回滚代码。
$ git checkout <file1> <file2> … <fileN>
或者可以直接回滚当前目录下的所有修改。
$ git checkout .
若当前修改已加入到index区域,则可使用以下命令将当前目录下的所有修改移出index区域。
$ git reset .
到这一步之后,使用上面提到git checkout就可以解决问题了。
修改已提交后,如果想对最后一次提交进行补救,可使用下面的命令。此时,index区域的文件会被补充到最后一次提交上去,并且可以修改最后一次提交的message。
$ git commit --amend
八、已提交代码的回退
如果想恢复到之前的commit作为一个新的commit。
$ git revert <commit>
恢复到三个提交之前的代码状态,使用如下命令,其中数字3省略时默认为1。
$ git revert HEAD~3
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。譬如,撤销之前的2个提交,同样2可省略,默认为1。
$ git reset HEAD~2
如果git reset带上soft参数,表示只回退commit信息,保留修改内容到index暂存区,若带上hard参数,则表示抛弃修改,彻底回退至某个版本。如:
$ git reset --hard HEAD~
九、已 push 代码的回退
当代码已被 push 到远程服务器时,可先按方法八把本地分支的代码撤回,对于非默认的分支(非 master 分支),可先在远程服务器删除该分支,再把本地分支重新推上去。
$ git push <远程主机名>:<分支名>
$ git push -u <远程主机名> <分支名>
对于 master 分支,无法直接删除远程分支,可使用强推的方法,即利用强覆盖方式用你本地的代码替代git仓库内的内容。
$ git checkout master $ git push -f
删除远程分支需万分谨慎,要提前做好备份,并知会团队其他成员,确保没有其他成员有关于该分支的未提交、push 的修改。
十、标签
git标签分为两种类型:轻量标签和附注标签。轻量标签是指向提交对象的引用,附注标签则是仓库中的一个独立对象。
列出所有标签
$ git tag
如果想查看某个标签的具体信息,可以使用show命令,带上标签名。
$ git show <标签名>
创建轻量标签
$ git tag <标签名>
创建附注标签
$ git tag -a <标签类型> -m “标签说明”
删除本地标签
$ git tag -d <标签名>
删除远程标签
$ git push origin :refs/tags/远程标签名
切换到打下某一标签时的代码
$ git checkout <标签名>
通常的git push不会将标签对象提交到git服务器,我们需要进行显式的操作,如指定标签名将对应标签提交到git服务器。
$ git push <远程主机名><标签名>
也可将本地所有标签一次性提交到git服务器。
$ git push -tags
相关文章推荐
- RPC failed; result=22, HTTP code = 411
- git更新已經刪除的文件
- 提取Git每次提交后Commit的文件
- GIT迁移服务器
- 分布式版本管理git入门指南使用资料汇总及文章推荐
- git终极指南:在实际开发中的应用
- Git远程操作详解
- 25个 Git 进阶技巧(翻译)
- 详解版本控制利器Git,SVN的异同以及适用范围
- Ruby实现的删除已经合并的git分支脚本分享
- 在 Shell 提示符中显示 Git 分支名称的方法
- Git使用基础篇(一些常用命令和原理)
- git fork同步是什么意思?
- Git使用小坑 Out of memory错误的解决方法
- Python的高级Git库 Gittle
- 使用GIT进行源码管理――GUI客户端小结
- 使用git代替FTP部署代码到服务器的例子
- linux系统安装git及git常用命令
- 分享下自己总结的Git常用命令
- Git 常用命令速查表(图文+表格)