我尝试在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'
答案 0 :(得分:14)
git
努力不丢失可能有价值的数据。在这种情况下,它实际上并不是合并分支,因为有问题的更改尚未提交。相反,当您执行git checkout
时,它会尝试保留新生但未提交的修改,因此它会检出您请求的提交,并添加您未提交的更改。如果您确实要放弃未提交的更改,请使用git checkout -f
或git checkout
,然后使用git reset --hard HEAD
。有时,如果您尚未提交的更改无法合并到您正在检查的内容中,则会收到错误消息并且结帐将失败。
答案 1 :(得分:0)
您是否使用过git checkout命令的任何选项?我问,因为你所描述的行为似乎就像使用“git checkout -f”时那样。
答案 2 :(得分:0)
git checkout
替换本地更改的文件。
git merge
合并本地&传入的变化,警告任何冲突。
这些命令都不会删除传入提交中不存在的本地文件。
只有git reset --hard
才会完全消除本地更改。