Skip to content

Instantly share code, notes, and snippets.

@zhuping
Last active August 29, 2015 13:58
Show Gist options
  • Save zhuping/10221558 to your computer and use it in GitHub Desktop.
Save zhuping/10221558 to your computer and use it in GitHub Desktop.
《版本控制之道--使用Git》学习笔记

提交修改

  1. 提交暂存后的修改

git add some-file
git commit -m 'changes to some-file'

  1. 提交工作目录树中的所有修改

git commit -m 'changes to some-file' -a

  1. 提交工作目录树中指定的修改

git commit -m 'changes to some-file' some-file 

查看文件改动

  • git diff查看工作目录树中未被暂存的改动,比较的是工作目录树中与暂存区之间的区别
  • git diff --cached比较的是暂存区和版本库中的区别,但不会显示没有暂存的修改
  • git diff HEAD比较工作目录树(包括暂存和未暂存的修改)与版本库中的差别

合并分支间的修改

  • 直接合并(straight merge) git merge daily/0.0.1
  • 压合合并(squashed merge) git merge --squash daily/0.0.1(把另一条分支上的全部提交压合成当前分支上的一个提交)
  • 拣选合并(cherry-picking) git cherry-pick -n daily/0.0.1(把另一条分支上的某个提交合并到当前分支)

分支删除及分支重命名

  • git branch -d daily/0.0.1 //-D 为强制删除,不再检查要删除的分支是否已经合并
  • git branch -m master myMaster //-M 可以覆盖已有分支名称,强制覆盖现有分支

增补提交

  • 察觉某疏忽之前,已经把代码提交了,如果想复用指定的提交,少一条提交记录(只针对最后一次提交)

git commit -m 'add link to blog' -a
git commit -C HEAD -a --amend

复位

  • 可以用^作为提交名称的修饰符来指定某个版本。HEAD^是把版本库复位到当前HEAD之前的那个版本上,把HEAD这个版本的修改扔到工作目录中。而540ecb73则是把版本库复位到540ecb7的曾祖父节点上,并把540ecb7、540ecb7父节点、540ecb7祖父节点上的修改扔到工作目录树中。

git reset 

快捷方法

  • 从master上拉一个叫daily/0.0.1的新分支,并且检出(check out)到新分支

git checkout master
git branch daily/0.0.1
git checkout daily/0.0.1


git checkout -b daily/0.0.1 master

usage

  • 场景:有master和daily/0.0.1分支,都未push过,如何把daily/0.0.1上的修改在master分支末梢重现?
  • 方法:使用变基命令git rebase。

git checkout master
git rebase daily/0.0.1

  • 场景:对daily/0.0.1分支打过tag标签,并且已经删除daily/0.0.1分支。在没有发布分支的情况下,如何对daily/0.0.1分支打补丁修改

git tag 1.0 daily/0.0.1
git branch -d daily/0.0.1

  • 方法:从打标签的地方再创建一条分支即可。

git branch daily/0.0.2 1.0
git checkout daily/0.0.2

  • 场景:daily/0.0.1分支已经有三次提交(git commit),如何把后两次的提交合并到master上?
  • 方法:使用拣选合并

git checkout master
git cherry-pick -n 321d76f(daily分支第二次的提交名称)
...
git commit //这里不要使用-m参数,编辑器会使用刚刚拣选的提交留言作为现在的提交留言

  • 清除工作目录树中的修改

git checkout HEAD  []

  • 取消已暂但尚未提交的修改的暂存标识

git reset HEAD  []

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment