比方说,我进行了一些更改并将其提交。然后,我又承诺了几次。现在,我想将某个特定字符串的更改从该提交移到新字符串中以进行选择。我怎样才能做到这一点?
可能是:
1.将此字符串更改为该提交之前的状态
2.提交
3.比更改并再次提交。
最后一次提交可能是精心挑选的。
答案 0 :(得分:0)
如果您的提交不是分支上的最后一次提交
1)用-n
选项(仅阻止您真正想要的一部分提交到分支),以选择其中的全部提交。提交)
git cherry-pick -n abc123
2)摆脱掉不需要的部分,将它们恢复到选择樱桃之前的状态:
git checkout -- path/to/file1 path/to/file2
3)通过简单的提交完成操作
git commit -m "Cherry-picked abc123 (only took such and such part)"
如果您的提交是分支上的最后一次提交
示例树:
A--B--C<<<master<<<HEAD
C
是您要修改的提交。
1)返回到使用git reset
进行提交之前的位置(--mixed
是默认模式),以将更改保留在工作树中但不包含索引
git reset B
2)仅添加“未摘樱桃”部分并进行提交
git add path/to/file1 path/to/file2
git commit -m "some message here"
(在此做一个旁注,如果文件有想要的和不必要的更改,则可以使用git add -p
有选择地添加块,请参见doc)
3)然后添加“樱桃精选”部分并再次提交。 (与上述相同,并添加了相关部分)
这将重写分支的最近历史记录,因此,如果您已经推送了要拆分的提交,则必须事先与您的同事就此操作达成共识,然后使用--force
将其推送到远程控制器来替换其对错误提交的记忆(很明显,如果您独自一人在回购协议上,则不是这样)。