git rebase

git 合并提交信息:
设置基为要合并提交信息的前一次提交,i表示互动
git rebase -i HEAD~2 // 会改变hash,不能在push完使用
// 还可以修改 提交顺序
在编辑器中修改要合并的提交的pick为s(squash;删除一行表示删除提交;edit修改提交说明),要留一个不改
// edit表示修改提交说明(这里就修改说明),并停留在修改修改的提交amending 状态,
// 这是可以创建新的提交到这里,或者修改这个提交
// 再 git commit --amend 之后需要git rebase --continue
保存退出(win下git bash使用的vim编辑器,ESC退出编辑模式,:wq保存并退出)
接着git出提示,o打开文件,并:wq!覆盖保存
可以用git commit --amend 修改最近的一个提交信息
git push -f 强制推送,因为版本信息不一样




在这里,你可以用"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并; 结果看起来就像一个新的"合并的提交"(merge commit):

但是,如果你想让"mywork"分支历史看起来像没有经过任何合并一样,你也许可以用 git rebase:
$ git checkout mywork
$ git rebase origin
这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 到最新的"origin"分支最后把保存的这些补丁应用到"mywork"分支上(之前commit hash全部改变了,相当于改写提交历史,然而 push 到远端的提交、公共分支上的历史是不能改动的)

在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突(打开文件删除某个版本的修改);
在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:
$ git rebase --continue
在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态
$ git rebase --abort