Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git签出自动合并本地修改_Git_Merge_Git Checkout - Fatal编程技术网

git签出自动合并本地修改

git签出自动合并本地修改,git,merge,git-checkout,Git,Merge,Git Checkout,我尝试在shell上执行以下命令 git init echo "test1" > test1.txt git add test1.txt git commit -a -m "test1" echo "test2" >> test1.txt git branch test git checkout test text.txt现在包含: test1 test2 签出到分支测试后来自master的所有本地修改将被合并 为什么? 我希望由于本地更改,git拒绝签出test。我

我尝试在shell上执行以下命令

git init

echo "test1" > test1.txt
git add test1.txt
git commit -a -m "test1"

echo "test2" >> test1.txt

git branch test
git checkout test
text.txt
现在包含:

test1
test2
签出到分支
测试后
来自
master的所有本地修改将被合并

为什么?

我希望由于本地更改,
git
拒绝签出
test
。我期望git请求提交或
隐藏本地更改

编辑: 我使用bash脚本来执行这些命令。我得到以下输出:

r@r:/tmp/test$ ./createrepo 
Initialized empty Git repository in /tmp/test/.git/
[master (root-commit) 0407f5b] test1
 1 file changed, 1 insertion(+)
 create mode 100644 test1.txt
M       test1.txt
Switched to branch 'test'

您是否在git checkout命令中使用了任何选项?我这样问是因为您所描述的行为与使用“git checkout-f”时类似。

git checkout
替换了本地更改的文件

git merge
合并本地和传入的更改,对任何冲突发出警报

如果这些命令将删除传入提交中不存在的本地文件,则两者都不存在


只有
git重置--hard
将完全清除本地更改。

git
努力避免丢失可能有价值的数据。在本例中,它实际上并没有合并分支,因为相关的更改尚未提交。相反,当您执行
git签出时
,它会尝试保留新做但尚未提交的修改,因此它会签出您请求的提交,并添加未提交的更改。如果确实要放弃未提交的更改,请使用
git checkout-f
,或
git checkout
,然后使用
git reset--hard HEAD
。有时,如果您尚未提交的更改无法完全合并到您要签出的内容中,您将收到一条错误消息,签出将失败。

我知道这一点。但是为什么
git checkout
会将
master
分支中的本地更改合并到
test
分支中,尽管我没有提交任何内容?你说的“合并master中的本地更改”是什么意思?它实际上没有执行
合并
。我不想放弃任何东西。但我不希望未限制的更改自动合并。如果我在
test
中提交了一些内容,然后进行一些未限制的更改并再次尝试切换,git说它不能,因为实际上存在未限制的更改。但是,如果这个新分支中没有提交,为什么git不这样做呢?因为
master
分支和
test
具有相同的
?如果您在
test
中提交了一些内容,那么在这个新分支上会有提交,所以我想我不明白您的问题。。。如果按照上面的示例,您在
test
分支上提交了
test2
更改,然后对
test.txt
进行了更多修改,并尝试在不先提交的情况下切换回
master
,则很可能无法干净地复制未提交的更改,因此,
checkout
将失败,直到您放弃更改或使用
git stash
。这里的混淆之处在于,OP认为当他签出到测试分支时,文件中有test2行意味着它们被合并。这是不正确的:这些更改不会合并到测试分支中,而是保存在工作目录中。尝试在两个分支中执行git diff和git status,您将看到我所说的内容。@EugeneSajine正确,但OP似乎认为在提交工作目录中所做的更改之前,以某种方式属于特定的分支,这也是错误的。所以在现实中,一开始就没有什么可以合并的(在git中使用这个术语)。正如您所说,本地未提交的修改只会被
git
保留,除非您告诉它不要这样做。现在我明白了:)在签出新分支时,我对git输出
M test1.txt
感到困惑。出于这个原因,我认为git可以进行合并,但事实并非如此。Git只接受对新分支的本地更改,这里也是本地更改。我也有同样的问题,奇怪的是,对于某些存储库,我无法在不提交的情况下签出,而其他存储库则合并。我查看了配置,没有发现任何差异。