【问题标题】:Reverting changes in Git and keeping later changesets恢复 Git 中的更改并保留后来的变更集
【发布时间】: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


【解决方案1】:

当您还原一个提交,该提交更改了在以后的提交中更改的行(或其周围的行被更改),那么您会得到一个合并冲突.您必须手动解决此冲突,而这正是 Visual Studio 要求您执行的操作。

Git 和 Visual Studio 都无法知道还原后哪些行是正确的,因此您必须进行选择。

【讨论】:

    猜你喜欢
    • 2012-06-07
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 2012-06-16
    • 2018-07-01
    • 2016-10-09
    • 2012-11-11
    相关资源
    最近更新 更多