我是git的新手,我正在尝试用它来理解概念,特别是分支和合并。
所以这是我的设置,
我有一个主分支,我用'master'文本创建一个主文本文件
现在我做git checkout -b branch
并创建一个分支
我编辑分支“父”文件并添加一行文本。
现在,如果我提交此更改并切换回master,它将不会影响,因为分支更改不应反映在主分支中。
但是如果我将分支保留为未提交并切换到master,则此更改反映在那里,git将主文件视为已编辑,当我这样做时
git status -s
它显示带有M。
的主文件有人可以向我解释未提交的更改如何在主分支中反映出来吗?
答案 0 :(得分:5)
Git在检查另一个分支时保留您未提交的更改,这非常实用。
您可以将此视为未提交的更改“仅属于”您的工作副本,而不属于任何分支或提交。他们是独立的。当您在分支中提交更改时,如果结帐具有不同的文件版本,它们当然会更改。
此行为的唯一例外是,如果分支更改将未提交的文件带到其他版本,则取消结帐的情况如下:
A--B - feature
\
-C - master
假设feature
分支中的提交B将一行更改为foo.txt
,并且您已检出master
分支。您对foo.txt
进行了不同的更改。
您在master
和结帐feature
git add foo.txt
git commit -m "changed foo.txt"
git checkout feature
此处没有问题,更改记录在master
中,当您转到feature
foo.txt
时也会相应更改。
如果您未提交并尝试签出feature
,那么Git将打印相应的消息,并保持master
分支签出:
git checkout feature
错误:您对以下文件的本地更改将被覆盖 通过结帐:
foo.txt的
请提交您的更改或存储它们 在你可以切换分支之前。中止
答案 1 :(得分:0)
在Git或任何版本控制系统中,所有合并操作都将在本地计算机上完成。因此,如果您在任何分支上有任何未提交的更改,以便它们不会丢失/不被注意,则它们将与分支刚刚切换/新结帐合并。除非您使用git push,否则您的更改将始终存在。当然,也可能存在相反的情况,但对程序员来说往往更有利。