Git - 两个分支的变化,都是错误的

时间:2015-09-25 14:43:45

标签: git

我可以找到类似场景的答案,但不是这个。

我检查了分支B.我进行了大量更改并添加了大量文件。

然后我需要快速修复分支A上的稳定代码。我在忘记分支A之前忘了在分支b上提交。

我在分支A上进行了修复并执行了<audio src="1.wav" onended="window.location.reload()" /> git add -a。然后我注意到我在分支B上添加的所有新文件现在已经在分支A上提交了(我没有意识到git是这样工作的)。新文件现在已经从分支B消失了。

我查看了如何修复,所以我恢复了分支A上的提交。

如果你想知道我为什么这么白痴,我才真正知道如何正确使用TFS。

如何让我的分支B回到原来的状态?我不介意再次在分支A上快速修复。

2 个答案:

答案 0 :(得分:0)

让XXX成为分支A上提交的SHA

(你可以通过

获得
git checkout A
git log

执行以下

git checkout B
git cherry-pick XXX -n
git reset HEAD .

这将从提交XXX中选择更改并将其应用于当前状态。这将包含您在B中需要的所有更改,但也包含对A的小修复。接下来,撤消此快速修复,您的工作目录就像您要求的那样

答案 1 :(得分:0)

首先,保留对已删除的分支A的更改。您可以使用git reflog查看&#34;孤儿&#34;承诺,包括你刚恢复的那个。使用git branch tmpA <commit-from-git-reflog>。现在你有一个(临时)分支tmpA包含你所有的变化(希望所有的变化)

然后你需要修复你的A分支。您应该结帐一个分支(git checkout A),然后您可以重新应用来自tmpA w / o提交的更改。基本命令是git cherry-pick --no-commit <tmpA>,但您可以使用git gui或备用GUI客户端来检查提交图。

git cherry-pick --no-commit ...之后,您将更改应用于工作树并计划提交但未实际提交。您应该检查更改(如果您更喜欢控制台,请再次通过git guigit add -i)。您可以添加和删除计划的更改(请注意,工作树保持不变,只记录下次提交时要提交的内容)。

完成对分支A选择适当的更改后,您应该提交它们并切换到分支B。再次git cherry-pick --no-commit tmpA,检查更改并从git索引中添加/删除它们,其中git记录要提交的内容。

完成修复后,您可以使用git branch -D tmpA

删除临时分支