![](/img/trans.png)
[英]Why does after i did 'checkout master', changes i did in the new branch show up in master?
[英]Why does git checkout master apply changes from new branch?
如果我从 master 创建一个新分支,然后进行一些更改,如果我不提交更改然后 checkout master,我的更改会跟随我回到 master。 我不明白...如果我在新分支中提交更改然后签出 master,那么 master 保持不变。 这不是在 master 中进行不必要的更改的秘诀吗? 这里正确的工作流程是什么?
git init
echo something > newfile
git add newfile
git commit -a -m "first commit"
git checkout -b dev
echo $(date) >> newfile
git checkout master
[user@toolbox test]$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: newfile
no changes added to commit (use "git add" and/or "git commit -a")
[user@toolbox test]$ cat newfile
something
Thu 26 Sep 2019 09:00:49 PM GMT
[user@toolbox test]$
But...
[user@toolbox test]$ git checkout -- newfile
[user@toolbox test]$ git checkout dev
Switched to branch 'dev'
[user@toolbox test]$ git commit -a -m "I dont get this"
On branch dev
nothing to commit, working tree clean
[user@toolbox test]$ git checkout master
Switched to branch 'master'
[user@toolbox test]$ git status
On branch master
nothing to commit, working tree clean
[user@toolbox test]$ cat newfile
something
[user@toolbox test]$
我期待“结帐”只是切换分支。 但显然我对 git 工作流程有些不理解。
这里的诀窍是了解您在工作树上的文件中拥有的内容,如果您尝试签出另一个分支,git 将查看修改后的文件是否与您想要 go 和 HEAD 中的相同(没有您未提交的更改)修订版....如果相同,则 git 了解您要求进行的切换不是问题...您的工作树更改(和新文件)将伴随您进行切换。 但是,如果修改后的文件在 HEAD 和您想要 go 之间的文件不同,则 git 将拒绝签出(当然,除非您强制执行)。 因此,总而言之,git 正试图尽其所能遵循您的命令,并防止您(不情愿地)破坏您的工作(尤其是尚未提交的工作)。 现在....话虽如此,您描述的过程的哪一部分让您摸不着头脑? 是git checkout -- newfile
新文件部分吗? 因为这正是您要求 git 以 HEAD 修订版的方式设置文件的方式(换句话说,忽略我对此文件所做的更改并将其设置为我编辑之前的方式......它甚至可以用于将文件的内容设置为在另一个分支/标签/修订版上的方式......在这种情况下,您会将文件放入等待提交的索引中)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.