如何将两个提交合并为一个提交?

我有一个分支“ first project”,提交2次。我想去掉这些提交,使它们看起来像一个单一的提交。

命令 git merge --squash听起来很有希望,但是当我运行 git merge --squash时,我的终端只会显示命令的选项。正确的命令是什么?

Commit 1:
Added 'homepage.html'
Added 'contacts.html'


Commit 2:
Added 'homepage.php'
Added 'homepage.php'
Deleted 'homepage.html'
Deleted 'contacts.html'
163680 次浏览

您希望 git rebase -i执行 交互式 rebase 交互式 rebase

如果你现在是 开始你的“提交1”,并且你想要合并的提交“提交2”是之前的提交,你可以运行 git rebase -i HEAD~2,它会产生一个编辑器列出 rebase 将要遍历的所有提交。您应该看到以“ pick”开头的两行。要继续进行压缩,请将第二行的第一个单词从“选择”改为“压缩”。那就保存你的文件,然后退出。Git 会将您的第一个提交压缩到第二个最后一个提交。

请注意,此过程将重写分支的历史记录。如果您正在推动您的代码的某个地方,您将不得不 git push -f和任何人共享您的代码将不得不跳过一些循环来拉您的更改。

注意,如果问题 没有中的两个提交是分支上的最后两个提交,那么过程将略有不同。

  1. 检查您的分支并计算所有提交的数量。
  2. 打开 git bash 并写入: git rebase -i HEAD~<quantity of your commits>(即 git rebase -i HEAD~5)
  3. 在打开的 txt文件中,除了第一次提交(位于顶部)之外,将所有提交的 pick关键字改为 squash。对于顶部一个改变它为 reword(这意味着你将提供一个新的评论这个提交在下一步) ,并点击保存!如果在 vim,按 esc然后保存输入 wq!和按回车。
  4. 提供意见。
  5. 打开 Git 并使用“获取所有”来查看新的更改。

成交

对于像我这样健忘的人来说,这是一个简单而懒惰的版本:

git rebase -i HEAD~3 或者不管提交多少次,而不是3次。

把这个转过来

pick YourCommitMessageWhatever
pick YouGetThePoint
pick IdkManItsACommitMessage

变成这样

pick YourCommitMessageWhatever
s YouGetThePoint
s IdkManItsACommitMessage

然后按 esc然后按 enter做一些动作来保存更改

当下一个屏幕出现时,去掉那些垃圾 # 行[2]并创建一个新的提交消息或其他内容,然后执行相同的 escape enter操作。[1]

哇,你的承诺减少了,或者你打破了一切。


[1]-或者任何与你的 git 配置工作。这只是一个序列,这是有效的给我的设置。

[2]-你会看到一些东西像 # this is your n'th commit几次,与您的原始提交权利下面这些消息。您需要删除这些行,然后创建一个提交消息来反映要合并为1的 n 次提交的意图。

这就是我所做的,比做一个交互式的 rebase (对我来说)更容易:

git reset HEAD~2.  // go back 2 commits.
git commit -am “My squashed single commit”
git push --force