我试图合并2个提交为1,所以我遵循“压缩提交与rebase”从git就绪。
我跑
git rebase --interactive HEAD~2
在结果编辑器中,我将pick更改为squash,然后save-quit,但由于出现错误,重基操作失败
没有之前的提交就不能“squash”
现在我的工作树已经达到了这个状态,我很难恢复。
命令git rebase——interactive HEAD~2失败:
交互式改基已经开始
git rebase -continue失败
没有之前的提交就不能“squash”
$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
首先你应该检查你有多少提交:
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 reset -mixed在你想合并的多次提交之前恢复一个基本版本,然后我做一个新的提交,这样可以让你提交最新的版本,确保你推送到服务器后你的版本是HEAD。
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 reset --mixed 249cf9392da197573a17c8426c282
“249cf9392da197573a17c8426c282”是第三个版本,也是你合并之前的基础版本,在那之后,我做了一个新的提交:
git add .
git commit -m 'some commit message'
希望对每个人来说都是另一种方式。
供参考,从git重置——帮助:
--mixed
Resets the index but not the working tree (i.e., the changed files are
preserved but not marked for commit) and reports what has not been
updated. This is the default action.
如果您想合并两个最近的提交,而只使用旧的提交的消息,您可以使用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