GIT允许我使用未提交的更改签出另一个分支,并更改该分支中的文件

时间:2017-06-03 18:58:43

标签: git

GIF展示了事件的顺序

enter image description here

我创建了一个分支return score/depth,更改了一个文件,然后在没有提交更改的情况下我结帐foo。 GIT允许我进行结账并继续进行修改。

我犯了这个改变。

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

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

3 个答案:

答案 0 :(得分:3)

这是对分支的作用及其运作方式的误解。

您签出一个分支,对与该分支相关的文件进行更改,但您不会在该分支中提交该更改。您所做的更改位于您的< em>未提交的文件空间。这意味着,只要您的文件不与另一个分支发生冲突,Git就会允许您随身携带这种未经修改的变更。

如果将文件添加到索引中,则在切换分支时应该收到类似这样的消息:

M   foo

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

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

我的建议:

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

因为你处于这种状态......

  • 将fbase重新固定到foo以确保其历史排列

答案 1 :(得分:0)

由于master获得了第一次提交,因此将阻止将另一个从foo更改为主的更改作为故障安全条件。如果您在foo中进行第二次更改,但这不会成为问题。

但是,作为更好的方法,我建议您将foo重新设置为master以使其相同,而不是尝试进行相同的修改。

答案 2 :(得分:0)

这不是不一致的行为。这是GIT非常期待的,它只是抱怨它试图将test.txt文件合并到它无法完成的主文件。

明显抱怨please commit your changes while switiching to another branch.

建议在我们的本地分支中提交更改。当您切换分支时,如果您能够跟踪几个文件的更改就可以了,如果有20个文件怎么办?在这种情况下,最好提交更改并切换到另一个分支。

切换到另一个分支时,未提交已更改的文件,而不是新文件。只有您在分支中更改的文件合​​并到另一个分支。

这里你合并了master分支中的text.txt文件,你在那里提交了。后来你去了分支Foo并编辑了文件,你没有在你的本地分支中提交文件,你切换了分支,它没有让你这么做。因为你无法跟踪的改变。

建议将更改提交到您当地的分支机构。

git checkout -b foo
echo random > test.txt
git add test.txt
git commit -m "random commit"
git rebase master
git checkout master
git merge foo

你已经完成了。