我有一个分支“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'
您想要
git rebase -i
执行交互式变基。
如果您当前正在进行“提交 1”,并且要合并的提交“提交 2”是上一个提交,则可以运行
git rebase -i HEAD~2
,这将生成一个编辑器,其中列出了所有提交rebase会遍历。您应该看到两行以“pick”开头的行。要继续挤压,请将第二行的第一个单词从“pick”更改为“squash”。然后保存文件并退出。 Git 会将您的第一次提交压缩为倒数第二次提交。
请注意,此过程会重写您的分支的历史记录。如果您要将代码推送到某个地方,则必须
git push -f
,并且任何共享您的代码的人都必须跳过一些障碍才能拉取您的更改。
请注意,如果有问题的两个提交不是分支上的最后两个提交,则过程将略有不同。
git rebase -i HEAD~3
或者无论提交多少次,而不是 3 次。转动这个
pick YourCommitMessageWhatever
pick YouGetThePoint
pick IdkManItsACommitMessage
进入这个
pick YourCommitMessageWhatever
s YouGetThePoint
s IdkManItsACommitMessage
然后执行一些操作,先点击
esc
,然后点击
enter
来保存更改。 [1]当出现下一个屏幕时,删除那些垃圾 # 行 [2] 并创建新的提交消息或其他内容,然后执行相同的
escape
enter
操作。 [1]哇哦,你的提交更少了。或者你刚刚破坏了一切。
[2] - 您会多次看到类似
# this is your n'th commit
的内容,而您的原始提交就位于这些消息的正下方。您想要删除这些行,并创建一条提交消息来反映您要合并到 1 中的 n 次提交的意图。
git rebase -i HEAD~<quantity of your commits>
(即
git rebase -i HEAD~5
)
txt
文件中,将所有提交的
pick
关键字更改为
squash
,除了第一次提交(位于顶部)。对于第一个,将其更改为
reword
(这意味着您将在下一步中为此提交提供新评论),然后单击“保存”!如果在 vim 中,请按
esc
,然后输入
wq!
保存,然后按 Enter。
git reset HEAD~2. // go back 2 commits.
git commit -am “My squashed single commit”
git push --force
git merge --squash
,就像主题启动者建议的那样。它创建一个新分支并与 squash 合并到其中:
git branch <result_branch_name> <point from where you want to merge commits>
git checkout <result_branch_name>
git merge --squash <branch_with_all_your_commits>
因此,您将收到创建结果分支的点与最终提交之间所有提交的分阶段更改。提交消息将包含来自所有压缩提交的所有消息。然后只需输入 git commit
,修改提交消息,您将获得包含所有必要更改的唯一提交。当你准备好说再见时,可以使用 gitbranch -D删除原始分支 =)