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

Don*_*n P 68 git merge branch git-svn rebase

我有一个分支'firstproject'有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'
Run Code Online (Sandbox Code Playgroud)

mea*_*gar 112

您想要git rebase -i执行交互式rebase.

如果您当前正在使用 "提交1",并且您想要合并的提交,"提交2",是之前的提交,您可以运行git rebase -i HEAD~2并将第二行的第一个单词从"pick"更改为"squash" .然后写下你的文件,然后退出.Git会将你的第一次提交压缩到你的第二次提交.

请注意,此过程会重写分支的历史记录.如果你在某个地方推送你的代码,那么你必须git push -f和共享代码的任何人都必须跳过一些箍来取消你的更改.

请注意,如果有问题的两个提交不是分支上的最后两个提交,则该过程将略有不同.

  • 如何合并不是分支上最后两个提交的 2 个提交? (3认同)
  • 如何`然后写文件并退出`?我正在使用Android Studio Terminal,git控制台本身,甚至是通过SourceTree软件打开的git控制台。但是如何保存并退出呢? (2认同)

Sta*_*chu 50

像我这样健忘的懒人简单版:

git rebase -i HEAD~3 或许多提交而不是3.

转过来

pick YourCommitMessageWhatever
pick YouGetThePoint
pick IdkManItsACommitMessage
Run Code Online (Sandbox Code Playgroud)

进入这个

pick YourCommitMessageWhatever
s YouGetThePoint
s IdkManItsACommitMessage
Run Code Online (Sandbox Code Playgroud)

然后执行一些操作,esc然后点击enter以保存更改.[1]

当下一个屏幕出现时,摆脱那些垃圾#行[2]并创建一个新的提交消息或其他东西,并执行相同的escape enter操作.[1]

Wowee,你的提交次数较少.或者你刚刚打破了一切.


[1] - 或任何适合您的git配置.根据我的设置,这只是一个有效的序列.

[2] - 你会看到一些类似# this is your n'th commit的东西,你的原始提交就在这些消息的正下方.您想要删除这些行,并创建一个提交消息,以反映您要合并为1的n次提交的意图.

  • 非常简洁的解决方案 - 谢谢。可能会很方便地概述这里使用的“s”代表壁球。使用该提交,但合并到之前的提交中 (5认同)
  • 在我看来,这是最好的答案 (4认同)
  • 如果您只有“2”提交并且想要合并相同的“2”提交,则需要运行“git reset --soft HEAD~”和“git commit --amend”。 (2认同)

Ray*_*ess 20

这就是我所做的。(对我来说)这比进行交互式变基更容易:

\n
git reset HEAD~2.  // go back 2 commits.\ngit commit -am \xe2\x80\x9cMy squashed single commit\xe2\x80\x9d\ngit push --force \n
Run Code Online (Sandbox Code Playgroud)\n

  • 这应该是公认的答案!或者至少获得更多选票!所有其他解决方案都非常复杂,并且需要大量打字,因此最好使用 GUI 软件(例如 sourcetree 或 tortoise),只需点击几下鼠标即可获得相同的结果。然而,您的解决方案是最干净、最快的,并且非常适合单独项目或您自己的分支项目。 (3认同)
  • `git reset HEAD~2.` 不是有效命令 (2认同)

小智 15

  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!并按Enter 键保存.
  4. 提供评论.
  5. 打开Git并制作"Fetch all"以查看新的更改.

完成