我有一个名为foo
的文件。我对M1
做了一些修改foo
并进行了修改。然后我在工作树中将其从HEAD
中检出,然后对其进行另一次修改M2
。现在我想在提交之前合并这两个修改。如何才能做到这一点?谢谢!
(我知道分支是为了这种工作。但我想知道是否有办法将分阶段文件与工作树中的修改版本合并。)
答案 0 :(得分:2)
最好的办法是藏匿:
# modify file
git stash -u
# modify file in a different way
git add -A && git commit -m "M2"
git stash pop
# resolve conflicts
git add -A && git commit --amend -m "M1 and M2 merged"
没有分支机构可以处理。
答案 1 :(得分:0)
最简单的方法是分四个步骤。
git commit
分阶段更改为foo。git add foo
,将M2放入临时区域。git commit --amend
,将M1与M2合并。这不完全是您的要求,但我相信这是获得您要求的结果的最有效方式。
答案 2 :(得分:0)
最明显的解决方案是创建两个提交,并合并它们。这是相当安全的,因为一旦你将更改变成两个不同的提交,就很难丢失它们,如果合并没有按你的意愿去,你可以扔掉合并提交并重试。
对于第一次提交,您已经进行了更改,因此只需git commit
即可。
对于第二个,您的工作副本中有一个状态,表示对原始HEAD
的更改。但既然你已经完成了那个提交,那么就会有干预; HEAD
是索引中的内容,因此看起来您的工作副本会还原这些更改。要解决这个问题,我们需要重置HEAD
点的位置,而不更改工作副本中的内容。
在此之前,让我们保存指向当前HEAD
:git branch was-in-index
的指针。现在,我们可以使用HEAD
重置为之前的HEAD
({1}}的父级),并添加并提交我们的更改git reset HEAD^
(或git add some stuff; git commit
,如果您想要你所有的改变。)
现在我们有两个分支机构;我们当前的一个,其中包含工作副本的更改,以及git commit -a
,其中包含索引中的更改。现在您可以根据需要合并这些; was-in-index
,git merge was-in-index
,或者你有什么。完成后,您可以删除git rebase was-in-index
分支。