Git 交互式 rebase

hiveer · 2014年09月19日 · 最后由 hiveer 回复于 2014年09月22日 · 3431 次阅读

在使用交互式 rebase 的时候遇到一些疑问 git rebase -i origin/mastergit rebase -i HEAD~2 这两个有什么区别?

一个是基于 master 的那个最新的 commit,一个是基于倒数第三个的

#1 楼 @Tony612 能再详细点吗?最好能给点例子

#1 楼 @Tony612 我在使用git rebase -i HEAD~2这种形式的时候,遇到一个问题 git rebase fatal: Needed a single revision 不晓得什么原因

#3 楼 @hiveer 你最好可以说一下,你当前是什么分支,这个分支是基于哪个分支分出来的,然后做了几个提交?

git rebase -i 是用来整理 commit 的吧?HEAD~2 是表示最新 commit 提交历史:[0..2],执行后,会有三条 commit 的信息,然后你可以进行删除,压缩,修改 message,常见在于,提交错误描述,两个 commit 可以合并为一个等。 如果你一直用 rebase 来取代 merge,commit 是根据你的合并来排序并非是你的提交时间。

#4 楼 @Tony612 我就一个分支 master,我总共三次提交两次已经推到了远程,有一次是本地。我现在想把三次提交合并为一次,然后覆盖远程。所以我就想在本地执行 git rebase -i HEAD~2,这个时候就得到了一个错误提示 git rebase fatal: Needed a single revision

#6 楼 @hiveer

git rebase -i 是没法包含历史上的第一次 commit 的,所以就报了这个错,如果你做到这个的话可以这么干:

git reset HEAD~2 git add -A git commit --amend

#6 楼 @hiveer 关于在 rebase -i 里使用 origin/master 和 HEAD~2 的区别

首先不论是 origin/master 还是 HEAD~2 其实都是某个 commit 的 sha1 的别名, origin/master 就是那个名叫 origin 的 remote 里的 master 分支所指向的 sha1,而 HEAD~2 就是比当前工作环境所在的 commit 早两个历史的 commit 的 sha1

#7 楼 @bolasblack 这个回答是我想要的

需要 登录 后方可回复, 如果你还没有账号请 注册新账号