我试图合并2个提交为1,所以我遵循“压缩提交与rebase”从git就绪。
我跑
git rebase --interactive HEAD~2
在结果编辑器中,我将pick更改为squash,然后save-quit,但由于出现错误,重基操作失败
没有之前的提交就不能“squash”
现在我的工作树已经达到了这个状态,我很难恢复。
命令git rebase——interactive HEAD~2失败:
交互式改基已经开始
git rebase -continue失败
没有之前的提交就不能“squash”
首先你应该检查你有多少提交:
git log
有两种状态:
一是只有两次提交:
例如:
commit A
commit B
(在这种情况下,你不能使用git rebase来做)你需要做下面的事情。
$ git reset --soft HEAD^1
$ git commit --amend
另一种情况是提交次数超过两次;你想合并提交C和D。
例如:
commit A
commit B
commit C
commit D
(在这种情况下,你可以使用git rebase)
git rebase -i B
而不是用“壁球”来做。剩下的就很简单了。如果你还不知道,请阅读http://zerodie.github.io/blog/2012/01/19/git-rebase-i/
如果你的主分支git日志看起来像下面这样:
commit ac72a4308ba70cc42aace47509a5e
Author: <me@me.com>
Date: Tue Jun 11 10:23:07 2013 +0500
Added algorithms for Cosine-similarity
commit 77df2a40e53136c7a2d58fd847372
Author: <me@me.com>
Date: Tue Jun 11 13:02:14 2013 -0700
Set stage for similar objects
commit 249cf9392da197573a17c8426c282
Author: Ralph <ralph@me.com>
Date: Thu Jun 13 16:44:12 2013 -0700
Fixed a bug in space world automation
你想合并前两个提交,只需执行以下简单的步骤:
首先,为了安全起见,在一个单独的分支签出第二个最后提交。你可以给分支起任何名字。Git checkout 77df2a40e53136c7a2d58fd847372 -b合并提交
现在,只需要从上次提交到这个新分支的更改中选择:git cherry-pick -n -x ac72a4308ba70cc42aace47509a5e。(如有冲突,应及时解决)
你在上次提交中的改变在第二次提交中。但是你仍然需要提交,所以首先添加你刚刚选择的更改,然后执行git commit—amend。
就是这样。如果你愿意,你可以在分支“merge -commits”中推送这个合并的版本。
此外,您现在可以在主分支中丢弃连续两次提交。只需将你的主分支更新为:
git checkout master
git reset --hard origin/master (CAUTION: This command will remove any local changes to your master branch)
git pull
如果您想合并两个最近的提交,而只使用旧的提交的消息,您可以使用expect自动化该过程。
我认为:
您使用vi作为编辑器
每次提交只有一行
我用git版本2.14.3 (Apple git -98)进行了测试。
#!/usr/bin/env expect
spawn git rebase -i HEAD~2
# change the second "pick" to "squash"
# down, delete word, insert 's' (for squash), Escape, save and quit
send "jdwis \033:wq\r"
expect "# This is a"
# skip past first commit message (assumed to be one line), delete rest of file
# down 4, delete remaining lines, save and quit
send "4jdG\r:wq\r"
interact
$git变基--堕胎
如果你想要撤销git rebase,可以在任何时候运行这段代码
我们赢了
重新应用最近两次提交。上面的命令将打开一个代码编辑器
[最近一次提交将在底部]。改变最后一个
致力于壁球运动。因为squash将与之前的提交融合。
然后按esc键并输入:wq保存退出
输入:wq后,您将进入active rebase模式
注意:如果没有警告/错误消息,您将获得另一个编辑器,如果有错误或警告另一个编辑器将不显示,您可以通过运行中止
$ git rebase -中止如果你看到一个错误或警告,否则继续运行$ git rebase -继续
您将看到2 commit消息。选择一个或自己写提交信息,保存并退出[:wq]
注意2:如果运行rebase命令,可能需要强制将更改推送到远程回购
$ git push -f
$ git push -f origin master