在一个分支上提交更改会撤消另一个分支上的未分级更改

时间:2017-11-23 19:20:59

标签: git

假设我在主分支上,我有1个文件temp.py和1个提交,然后

1)我对temp.py

进行了更改

2)签出另一个分支(feature)(我不添加或提交文件)

3)在功能分支上,我add temp.pycommit更改了

4)再次结帐主人,我对temp.py所做的原始更改已撤消

以下是执行上述步骤的代码:

$ git branch
* master
$ cat temp.py
print "Hello World"
$ echo "print \"Bye Bye\"" >> temp.py
$ cat temp.py
print "Hello World"
print "Bye Bye"
$ git checkout -b feature
M   temp.py
Switched to a new branch 'feature'
$ git add temp.py
$ git commit -am "added Bye Bye to temp.py"
[feature d8e363a] added Bye Bye to temp.py
 1 file changed, 1 insertion(+)
$ git checkout master
Switched to branch 'master'
$ cat temp.py
print "Hello World"
$

在功能分支上的addcommit之前,主人上的temp.py是:

print "Hello World"
print "Bye Bye"

但在功能addcommit之后,更改已撤消,我最后结束:

print "Hello World"

我很困惑为什么在feature分支上提交更改会影响master分支,为什么会发生这种情况?

我知道这个例子不是git的正常用法,但我觉得它强调了我不理解的git的某些方面。

这个问题与我提出的问题有关:Checkout another branch when there are uncommitted changes on the current branch,但我无法在那里找到答案。

1 个答案:

答案 0 :(得分:3)

这对我来说是正确的。在这里你可能会感到困惑。

当您签出新分支时,Git 保留您的工作索引并将其与您一起带到新分支。你可以从这一行看到这个:

M   temp.py

现在,temp.py的副本只是只有一个Git知道的两行。

当您提交此更改时,feature现在包含Python文件,其中包含两行。现在,您已更改回master,并且正如预期的那样,master仅包含一条行。

您没有将更改提交给master,因此master无法了解这些更改。它们存在于您的功能分支上。