将某些更改从一次提交移至新一次

时间:2019-02-26 06:10:25

标签: git

比方说,我进行了一些更改并将其提交。然后,我又承诺了几次。现在,我想将某个特定字符串的更改从该提交移到新字符串中以进行选择。我怎样才能做到这一点? 可能是:
1.将此字符串更改为该提交之前的状态
2.提交
3.比更改并再次提交。
最后一次提交可能是精心挑选的。

1 个答案:

答案 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将其推送到远程控制器来替换其对错误提交的记忆(很明显,如果您独自一人在回购协议上,则不是这样)。