繁体   English   中英

为什么 git checkout 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM