【发布时间】:2022-12-04 18:17:00
【问题描述】:
我不确定我是否错误地理解了还原的工作原理,还是 Visual Studio 只是在做一些奇怪的事情。 首先,我在 master 分支中进行了以下提交
WriteNumbers(100, 2);
void WriteNumbers(int toWhere, int dividableByWhat)
{
for (int i = 1; i <= toWhere; i++)
if (i % dividableByWhat == 0)
Console.WriteLine(i);
Console.WriteLine();
}
然后我创建了新分支,切换到它并添加了新行如下
WriteNumbers(100, 2);
WriteNumbers(100, 3);
void WriteNumbers(int toWhere, int dividableByWhat)
{
for (int i = 1; i <= toWhere; i++)
if (i % dividableByWhat == 0)
Console.WriteLine(i);
Console.WriteLine();
}
我将这个分支合并到 master 中。之后我在 master 中做了另一个提交,我刚刚添加了一个新的 WriteNumbers(100, 4); 行。
现在根据我的理解,如果我恢复引入WriteNumbers(100, 3); 的变更集,我的文件中应该仍然有WriteNumbers(100, 4);,但情况似乎并非如此,至少在 Visual Studio 中是这样。
正如我在变更集上运行 revert 时所见,我可以选择删除这两行(就像我将第二个分支合并到 master 之前一样)或保留这两个更改(这也是无效状态)。有没有其他方法可以删除 WriteNumbers(100, 3); 行,或者我只是做错了什么?
【问题讨论】:
-
就 Git 本身而言,在中间提交上运行
git revert会产生一个合并冲突,因为删除一个WriteNumbers电话的想法很好,但是要删除的行应该被包围以上通过另一个WriteNumbers电话,和以下通过一个空行.但是当前文件中要删除的行在下面有另一个WriteNumbers调用。 Git 不能(也不应该)理解尽管上下文不匹配也可以删除该行。作为程序员,您应该找出正确的结果。 -
在命令行 Git 中,您会遇到冲突,并且你提供正确的结果.在任何特定的 IDE(例如 Visual Studio)中如何表示取决于 IDE,而不是 Git。
标签: git visual-studio git-rebase git-revert