大多数时候,当我尝试检出另一个现有分支时,如果我在当前分支上有一些未提交的更改,Git不允许我.所以我必须首先提交或存储这些更改.
但是,偶尔Git允许我签出另一个分支而不提交或存储这些更改,它会将这些更改带到我签出的分支.
这里的规则是什么?更改是分阶段还是未分阶段是否重要?将更改传递给另一个分支对我没有任何意义,为什么git有时会允许它?也就是说,它在某些情况下有用吗?
为什么git命令要切换名为git checkout?的分支?
它真的有意义吗?
我会改名git switch.此外,git checkout还有其他含义:例如还原文件(如svn revert)
我正在学习git并且正在关注http://gitimmersion.com上的优秀教程.
在这些教程中,有一个模糊试图解释分离的HEAD,并指出:
git中的"分离的HEAD"消息只是意味着HEAD(跟踪当前工作目录应匹配的内容的git部分)直接指向提交而不是分支.只有在您不切换到其他分支时,才会记住在此状态下提交的任何更改.一旦您签出新的分支或标签,分离的提交将"丢失"(因为HEAD已移动).如果要保存以分离状态完成的提交,则需要创建一个分支来记住提交.
关于这个的一些问题:
提前致谢!
我是git的新手,并试图围绕分支的工作方式.根据文档git checkout
更新工作树中的文件以匹配索引或指定树中的版本.如果>没有给出路径,git checkout也会更新HEAD以将指定的分支设置为>当前分支.
所以据我所知,我工作的目录中的文件(我执行git init的文件)应该根据我所在的分支进行更改.我很困惑,因为当我在分支之间切换时不会发生这种情况.在切换分支之前我正在编辑的编辑存在于我切换到的分支中.我做错了什么或git checkout不能这样工作,我只是误解了文档?
我将在序言中提到,我已经使用 Git 多年了,但我的知识仅限于非常基本的工作流程。意识到这一点,我在“高级”Git 功能方面已经取得了很大进步,但这里有一个我不太明白的问题:
具体是git checkout [file]做什么的?
我的理解是,它检索该特定文件的最新修订/提交,丢弃任何未暂存的工作副本。
所以,我想知道这是否与 有何不同git restore [file],以及何时我可能想使用两者中的任何一个。
可悲的是,我在其他地方找不到非常明确的答案。
有没有一种方法可以重置工作目录中的所有文件,而不能重置暂存区中的所有文件?
我知道使用以下命令可以重置任何单个文件:
git checkout thefiletoreset.txt
另外,通过使用以下命令,可以将整个存储库重置为最后的提交状态:
git reset --hard
但是,是否有任何命令可以重置整个工作目录,而使暂存区域保持不变?