【问题标题】:Understanding git behavior on a checkout; expected an error on a checkout but did not get one了解结账时的 git 行为;预计结账时会出错,但没有收到
【发布时间】:2015-03-31 04:27:52
【问题描述】:

我的问题是结帐时的 git 行为,这里是阐明我不理解的行为的步骤。我创建了一个目录testdir,其中包含文件foobar,每个文件都有一行文本。我执行以下操作:

混帐初始化 混帐添加。 git 提交 git 分支错误

所以我有master 分支和一个相同的bug 分支。在master 中,我将一行文本添加到文件foo,但不添加或提交到主文件,只是我本地树上的文件更改。接下来我做:

git结帐错误

我预计会收到以下错误:

错误:您对以下文件的本地更改将被结帐覆盖: 富 请在切换分支之前提交您的更改或存储它们。

但我确实 NOT 得到了上述错误,我的问题是在这种情况下 git 怎么没有错误?相反,我得到了以下信息:

root@revision-control ~/testdir# git checkout bug 美富 切换到分支“错误”

我现在在bug 分支,但foo 文件有我在master 时添加的第二行。

谁能解释这里发生了什么以及为什么 git 让我在没有错误消息的情况下更改分支?并且文件中没有合并冲突指示符。

接下来我改回master 分支并添加然后将更改提交到foo 文件(所以master 文件foo 有2 行,bug foo 有1 行)。我在master 中对foo 进行了更改并添加了第三行文本,现在当我尝试签出bug 分支(与上面相同的git 命令)时,我得到:

user@host ~/testdir# git checkout bug 错误:您对以下文件的本地更改将被结帐覆盖: 富 请在切换分支之前提交您的更改或存储它们。 中止

那么为什么现在这种行为与以前不同并且我得到了错误? (这是我最初期望的行为)。

【问题讨论】:

  • 由于您未提交修改的基础/来源与bug 中的相同(指向与您当前的HEADmaster 相同的提交)Git 能够签出新分支。如果bug 包含对该文件的任何更改,您将收到预期的错误。

标签: git git-branch git-checkout


【解决方案1】:

根据git checkout 的文档:

git checkout <branch>
Local modifications to the files in the working tree are kept, so that they can be committed to the <branch>.

分支之间的切换应该被视为应用了代表它们之间差异的补丁。

在您的第一种情况下没有区别。
在第二种情况下,存在冲突,checkout 命令甚至都没有尝试解决。

【讨论】:

    【解决方案2】:

    欢迎新人!

    现在已经有一段时间了,但我曾经设法以与您相同的错误结束:

    error: Your local changes to the following files would be overwritten by checkout
    

    我读到其中一种解决方案是删除文件(rm),然后执行结帐。否则,您也可以添加并存储它们。 强制结帐,例如:

    git checkout --force master
    

    可能是另一种选择。

    你试过这个链接GIT - Fail to checkout to other branch when nothing to commit - when file is in gitignore吗?也许这也可以进一步帮助您..

    干杯。 乔伊

    【讨论】:

      猜你喜欢
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 2016-11-24
      • 2010-11-08
      • 2017-10-28
      • 2016-03-10
      相关资源
      最近更新 更多