Git-两个分支中的更改,都是错误的

Git-两个分支中的更改,都是错误的,git,Git,我可以找到类似情况的答案,但不完全是这样 我签出了分支B。我做了大量更改并添加了很多文件 然后我需要快速修复分支a上的稳定代码。在签出分支a之前,我忘记提交分支b 我对分支A进行了修复,并执行了git-add-A,git-commit。然后我注意到我在分支B上添加的所有新文件现在都在分支A上提交了(我不知道git是这样工作的)。新文件现在已经从分支B中消失,它们应该在那里 我查看了如何修复,因此恢复了分支A上的提交 只有当你想知道为什么我是个白痴时,我才真正知道如何正确使用TFS 我怎样才能使我

我可以找到类似情况的答案,但不完全是这样

我签出了分支B。我做了大量更改并添加了很多文件

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

我对分支A进行了修复,并执行了
git-add-A
git-commit
。然后我注意到我在分支B上添加的所有新文件现在都在分支A上提交了(我不知道git是这样工作的)。新文件现在已经从分支B中消失,它们应该在那里

我查看了如何修复,因此恢复了分支A上的提交

只有当你想知道为什么我是个白痴时,我才真正知道如何正确使用TFS


我怎样才能使我的分支机构B恢复原状?我不介意再次对分支A进行快速修复。

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

)你可以通过

git checkout A
git log
)

执行以下命令

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

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

好的,首先,保留对已删除的分支A所做的更改。您可以使用
git reflog
查看“孤立”提交,包括刚刚恢复的提交。使用
git分支tmpA
。现在您有了一个(临时)分支
tmpA
,其中包含所有更改(希望是所有更改)

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

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

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


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

删除临时分支,您使用哪个命令恢复了上次提交?谢谢。我确实这样做了,但是我只得到了一些文件,还有大量关于未合并文件的错误。谢谢。好的,因为我意识到我自己的无能,在我对分支a做任何更改之前,我对分支B做了一个备份。听起来只是复制一下可能更容易些?我没想到会这么复杂。我显然需要做大量的阅读,但在这种情况下,是我的工作流程错了吗?我可以看到我自己在分支之间切换,忘记了提交很多内容(在TFS上不是问题),我不想继续遇到这个问题。通常,git会阻止一个人在工作树中切换未提交更改的分支,如果这样的切换会覆盖更改,那么您可以放心地假设更改不会“悄悄丢失”。您的情况稍微复杂一些:您在一个工作树中混合了两个分支的更改。同样,对于git,这不是一个真正的问题,因为您可以选择在下一次提交时逐行提交更改(甚至不是逐文件提交)。但当然,你需要一些工作来妥善解决当前的混乱局面。我相信在获得一些git经验后,你会很容易地处理这种情况(实际上这是一种“正常工作情况”),这只是“手指记忆”的问题(即,经验水平,允许一个人自动执行常规操作,而不关注细节)