假设我在本地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个提交
m1m5dgzv1#
你需要执行一个交互式变基。在提交“john”时将模式设置为pick,在提交“Paul”时将模式设置为edit,然后在提交“大卫”时将模式设置为squash。本质上,这将把squash大卫转换为Paul,并且您将在一次提交中获得两者的更改。在Paul上使用edit关键字将允许您在运行rebase之前重命名提交,这可能会使您的提交历史更清晰。如果你不关心这个问题,你也可以在“Paul”上使用pick模式。
pick
edit
squash
pkln4tw62#
一个交互式的变基在这里是相当矫枉过正的。您可以简单地重置/重新提交。
git reset --soft HEAD~2 git commit -m "message describing changes in commits 2 and 3" git push --force-with-lease
pinkon5k3#
我试着去看历史的变迁要查看历史记录,不要挤压(squish);改变历史(History)* 查看 * 历史记录的命令是git log。特别是你会说
git log
git log --patch
如果问题是一个提交与另一个提交有何不同(即什么变化导致从一个到另一个),命令是git diff。
git diff
czq61nw14#
m1--------m2-------m3 (old -> new)
m1--------m2' (old -> new)
4条答案
按热度按时间m1m5dgzv1#
你需要执行一个交互式变基。在提交“john”时将模式设置为
pick
,在提交“Paul”时将模式设置为edit
,然后在提交“大卫”时将模式设置为squash
。本质上,这将把
squash
大卫转换为Paul,并且您将在一次提交中获得两者的更改。在Paul上使用
edit
关键字将允许您在运行rebase之前重命名提交,这可能会使您的提交历史更清晰。如果你不关心这个问题,你也可以在“Paul”上使用pick
模式。pkln4tw62#
一个交互式的变基在这里是相当矫枉过正的。您可以简单地重置/重新提交。
pinkon5k3#
我试着去看历史的变迁
要查看历史记录,不要挤压(squish);改变历史(History)* 查看 * 历史记录的命令是
git log
。特别是你会说
如果问题是一个提交与另一个提交有何不同(即什么变化导致从一个到另一个),命令是
git diff
。czq61nw14#
1.将pick更改为s或squash(弹出)(提交m3)
1.保存(wq)
结果: