假设我在主分支上,我有1个文件temp.py
和1个提交,然后
1)我对temp.py
2)签出另一个分支(feature
)(我不添加或提交文件)
3)在功能分支上,我add
temp.py
和commit
更改了
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"
$
在功能分支上的add
和commit
之前,主人上的temp.py
是:
print "Hello World"
print "Bye Bye"
但在功能add
和commit
之后,更改已撤消,我最后结束:
print "Hello World"
我很困惑为什么在feature
分支上提交更改会影响master
分支,为什么会发生这种情况?
我知道这个例子不是git的正常用法,但我觉得它强调了我不理解的git的某些方面。
这个问题与我提出的问题有关:Checkout another branch when there are uncommitted changes on the current branch,但我无法在那里找到答案。
答案 0 :(得分:3)
这对我来说是正确的。在这里你可能会感到困惑。
当您签出新分支时,Git 保留您的工作索引并将其与您一起带到新分支。你可以从这一行看到这个:
M temp.py
现在,temp.py
的副本只是只有一个Git知道的两行。
当您提交此更改时,feature
现在包含Python文件,其中包含两行。现在,您已更改回master
,并且正如预期的那样,master
仅包含一条行。
您没有将更改提交给master,因此master无法了解这些更改。它们存在于您的功能分支上。