git签出自动合并本地修改
我尝试在shell上执行以下命令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。我
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只接受对新分支的本地更改,这里也是本地更改。我也有同样的问题,奇怪的是,对于某些存储库,我无法在不提交的情况下签出,而其他存储库则合并。我查看了配置,没有发现任何差异。