GIT 允许我 checkout 具有未提交更改的另一个分支,并更改该分支中的文件

标签 git

展示事件顺序的 GIF

enter image description here

我创建一个分支foo ,更改文件,然后在不提交更改的情况下 checkout master 。 GIT 让我进行 checkout ,并且修改会被结转。

我提交了此更改。

切换回分支foo ,更改文件——巧合的是,使其与 master 中的版本相同。 -- 然后在不提交更改的情况下我 checkout master 。这次我收到错误“错误:您对以下文件的本地更改将被 checkout 覆盖:index.html 请在切换分支之前提交您的更改或存储它们。正在中止”

造成这种不一致行为的原因是什么?

最佳答案

这是对分支的作用及其工作原理的误解。

您 checkout 一个分支,对与该分支相关的文件进行更改,但是您没有在该分支中提交该更改。您所做的更改位于您的中未提交的文件空间。这意味着,只要您的文件不与另一个分支冲突,Git 将允许您随身携带未提交的更改。

如果将文件添加到索引,则在切换分支时应该会收到如下消息:

M   foo

这意味着文件 foo 已被修改,这是您的视觉提示。

既然您已经切换回其他分支,并且编辑了具有相同内容的同一文件,Git 无法跟踪该情况,因为您还没有真正告诉它。在 Git 看来,您对同一个文件创建了两个完全不同的修订版,这会导致冲突。

我的建议:

  • foo 分支中提交更改
  • 将更改 merge 到master

既然你处于这种状态...

  • 将 master 重新设置为 foo 以确保它们的历史记录保持一致

关于GIT 允许我 checkout 具有未提交更改的另一个分支,并更改该分支中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44347547/

相关文章:

java - heroku 无法选择 gradle-wrapper 和正确的 java 版本

git - 使用 Git merge 选定的代码行?

python - git log -- <file_name> 在终端上工作正常,但在 git python 中执行 g.log(file_name) 显示错误

git - 如何查看 origin/master 领先于 master 的提交消息?

git - GitLab 是否允许 wiki merge 请求?

git - 断言当前 HEAD 指向 master 的命令?

django - git 和 django 迁移 : ignore the migrations files

windows - git bash (cache passphrase key) : Can't get the ssh-agent to run on windows, 修改了.bashrc 和.profile

Git pull - 以下未跟踪的工作树文件将被 merge 覆盖

git cherry-pick --continue, '--no-edit' 选项?