我有两个分支A,B。
在分支A中,我添加了一个名为a.py的文件,其中包含:
import os
import math
我添加并提交了文件(并推送到远程)。
我创建了另一个分支,B就是这样:
git checkout -b B
分支B中的我添加了另一个文件并添加,提交并推送它。
我也改变了a.py:
import os
import sys
之后我还添加了7个文件并推送它们(在B中)。
现在,我很遗憾,我希望通过将A添加到B来保持:import math
而不会丢失所有旧的提交。只返回(但不是手动)导入数学。
当我只使用IDE将A合并到B时,它会显示already up to date
,但事实并非如此,因为在A中我有import math
而在B中我有import sys
。
我该如何解决?
我害怕失去我所有的工作。
提前致谢。
答案 0 :(得分:4)
Ipacheco是对的,但让我详细说明。
在git中,当您将两个分支合并在一起时,它不会考虑内容的不同之处。它考虑提交的不同之处。
所以你有import math
的分支A.但更重要的是你承诺#1。
当您从A分支到B时,git副本将#1(带有import math
更改)提交到B.然后您进行进一步更改 - 提交#2。因此B的提交历史为#1和#2。
所以当你尝试将A合并到B中时,git说B已经提交#1(你刚刚覆盖了它)。 基本上,A没有任何B没有的新作品。因此B是“最新的”。
如果你想返回,你实际上必须将提交还原为B,这些提交有你不想要的更改。
编辑:更具体地说,您可以从命令行使用git revert <commit>
。这将添加一个撤消指定提交的新提交。所以你不会失去任何工作。但它确实意味着这两个提交都在你的历史中。 (如果这是一个问题,请转而使用rebase
。)有关还原here的更多信息。使用git log
查找提交哈希值。
答案 1 :(得分:3)
B“已经是最新的”,因为它是A的一个分支,并且在创建B分支后A未更新。