git checkout自动合并本地修改

时间:2012-10-10 15:13:10

标签: 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

结帐到分支test后,master的所有本地修改都会合并。

为什么呢?

由于本地更改,我预计git会拒绝结帐到test。我希望git要求提交或stash本地更改。

编辑: 我使用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'

3 个答案:

答案 0 :(得分:14)

git努力不丢失可能有价值的数据。在这种情况下,它实际上并不是合并分支,因为有问题的更改尚未提交。相反,当您执行git checkout时,它会尝试保留新生但未提交的修改,因此它会检出您请求的提交,并添加您未提交的更改。如果您确实要放弃未提交的更改,请使用git checkout -fgit checkout,然后使用git reset --hard HEAD。有时,如果您尚未提交的更改无法合并到您正在检查的内容中​​,则会收到错误消息并且结帐将失败。

答案 1 :(得分:0)

您是否使用过git checkout命令的任何选项?我问,因为你所描述的行为似乎就像使用“git checkout -f”时那样。

答案 2 :(得分:0)

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

git merge 合并本地&传入的变化,警告任何冲突。

这些命令都不会删除传入提交中不存在的本地文件。

只有git reset --hard才会完全消除本地更改。