大家早,
假设我有一系列提交,如下所示:
- abc000
- def111
- abc222
- def333
- abc444
- def555
我知道我可以使用
$ git diff -c --binary abc000..def555 > /tmp/abc000_def555.patch
生成将系统从 abc000 升级到 def555 的补丁。
但如果我想(因为一些无聊的原因而无法进入)怎么办?exclude补丁中的 def333 - 我该怎么做?请注意,我不想恢复 def333,只是我不希望补丁包含此提交。
Thanks
实际上all git diff
s 是成对提交的:上面比较了中的树/文件abc000
反对那些在def555
。如果举例来说def333
变化dir/file
但没有任何改变dir/file
之间abc000
and def555
(例如,改变def333
被沿途的某些东西抵消了)你可能看不到dir/file
根本就在那儿。
但总的来说,所做的改变def333
将会改变dir/file
以比较版本时显示的方式abc000
反对其中的一个def555
。所以你会probably看到那个变化。
获得显示“什么”的差异的最简单方法def555
看起来就像如果def333
被恢复”就是这样做的:创建一棵树(在临时分支上)并恢复更改。要使用实际的命名分支来执行此操作,您可以执行以下操作:
git checkout def555 # by ID, so that you get a "detached HEAD"
git checkout -b temp-branch
git revert --no-edit def333
git diff [options] abc000
git checkout somebranch; git branch -D temp-branch
如果您不想要临时分支怎么办?嗯,这很简单:只是不要创建一个。如上所述获取“分离的 HEAD”,按照上面的方式进行恢复,然后git checkout somebranch
。没有要删除的临时分支,除了 git 会警告您要留下的未命名分支......这正是您想要的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)