# 修改你的代码
$ git add .
$ git commit --amend
# 正常的写代码
$ git aad .
$ git commit -m "add a feature"
$ git revert HEAD
$ git checkout v2.0分支
$ git cherry-pick 38361a55 # 38361a55 这个commmit位于v3.0分支中
如果发生冲突,则手动解决冲突,然后:
git add .
git commit
rebase -i
修改提交git stash
git rebase -i 9633cf0919^
pick
改成 edit
git add
将改动文件添加到暂存git commit –amend
追加改动到提交git rebase –continue
移动 HEAD 回最新的 commitgit stash pop
如果只想修改commit消息,可使用:git commit --amend
rebase -i
汇合提交git rebase -i HEAD~4
pick 1eadf40 add first
pick 2d28dcf add second
pick 819b84b add third
pick 6edbf3a add fourth
# Rebase ae14a33..6edbf3a onto 6edbf3a (4 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop = remove commit
# l, label
有几个命令需要注意一下:
按照如上命令来修改你的提交纪录:
p 1eadf40 add first
s 2d28dcf add second
s 819b84b add third
s 6edbf3a add fourth
error: cannot 'squash' without a previous commit
注意不要合并先前提交的东西,也就是已经提交远程分支的纪录。
git rebase --edit-todo
这时候会一直处在这个编辑的模式里,我们可以回去继续编辑,修改完保存一下:
git rebase --continue
git log
git rebase
合并分支git:(feature1) git rebase master
注意:执行 git rebase master
是如果冲突了,则需要手动解决冲突,然后执行:
git add .
git rebase --continue
rebase
做的事情:
git merge -–squash
合并分支Git相对于CVS和SVN的一大好处就是merge非常方便,只要指出branch的名字就好了,如:
$ git merge another
$ git checkout another
# modify, commit, modify, commit ...
$ git checkout master
$ git merge another
但是,操作方便并不意味着这样操作就是合理的,在某些情况下,我们应该优先选择使用–squash选项,如下:
$ git merge --squash another
$ git commit -m "message here"
--squash
选项的含义是:本地文件内容与不使用该选项的合并结果相同,但是不提交、不移动HEAD,因此需要一条额外的commit命令。其效果相当于将another分支上的多个commit合并成一个,放在当前分支上,原来的commit历史则没有拿过来。
判断是否使用--squash
选项最根本的标准是,待合并分支上的历史是否有意义。
如果在开发分支上提交非常随意,甚至写成微博体,那么一定要使用--squash
选项。版本历史记录的应该是代码的发展,而不是开发者在编码时的活动。
只有在开发分支上每个commit都有其独自存在的意义,并且能够编译通过的情况下(能够通过测试就更完美了),才应该选择缺省的合并方式来保留commit历史。
参考来源: