git 将两个提交合并为一个

r6l8ljro  于 2023-09-29  发布在  Git
关注(0)|答案(4)|浏览(130)

假设我在本地git repo上有一个text.txt文件,我向远程repo提交了3次:提交1:

john

提交2:

john
Paul

承诺3:

john
Paul
David

我的目标是能够查看提交1之后所做的更改,因此我尝试将最后2次提交合并为一次。我该怎么做?
我试过:

git reset --hard HEAD~2
git push origin HEAD --force

但它只是删除最后2个提交

m1m5dgzv

m1m5dgzv1#

你需要执行一个交互式变基。在提交“john”时将模式设置为pick,在提交“Paul”时将模式设置为edit,然后在提交“大卫”时将模式设置为squash
本质上,这将把squash大卫转换为Paul,并且您将在一次提交中获得两者的更改。
在Paul上使用edit关键字将允许您在运行rebase之前重命名提交,这可能会使您的提交历史更清晰。如果你不关心这个问题,你也可以在“Paul”上使用pick模式。

pkln4tw6

pkln4tw62#

一个交互式的变基在这里是相当矫枉过正的。您可以简单地重置/重新提交。

git reset --soft HEAD~2
git commit -m "message describing changes in commits 2 and 3"
git push --force-with-lease
pinkon5k

pinkon5k3#

我试着去看历史的变迁
要查看历史记录,不要挤压(squish);改变历史(History)* 查看 * 历史记录的命令是git log
特别是你会说

git log --patch

如果问题是一个提交与另一个提交有何不同(即什么变化导致从一个到另一个),命令是git diff

czq61nw1

czq61nw14#

m1--------m2-------m3 (old -> new)
  1. git rebase -i HEAD~2
    1.将pick更改为ssquash(弹出)(提交m3)
    1.保存(wq)
    结果:
m1--------m2' (old -> new)

相关问题