Git 中的 working tree 是什么
working tree 是什么
working tree 就是你 Git 仓库下的当前检出的(checkout)所有文件,一般包含了 HEAD 的提交(commit)内容,以及你本地还没有提交的修改。
假设我们的 Git 仓库是这样的。
我们当前所在的分支是 main 分支,所以 HEAD 指向 main 分支,而 main 分支最新的提交内容是第 5 次提交,所以 HEAD 的内容就是第 5 次提交的内容。所以 working tree 就是第五次提交的所有文件。让我们更详细的看看。
dirty working tree
假设我们在第 5 次的基础上做了修改,但是还没有提交,那么这个状态的 working tree 被称作 dirty working tree。没错,它脏了,它被动过了。
这个时候,如果你的某些操作导致 working tree 有改变,而且这个改变还是不可调和的,Git 就会提醒你当前的修改会被覆盖,操作失败,需要把你的修改提交掉,或者暂存之后才能继续切换过去。
问题实战
知道 working tree 是什么之后,当你遇到这些问题时,就一下明白是什么原因了。
The following untracked working tree files would be overwritten
这个就是你本地做了修改,现在你的某些操作会让当前修改的内容被覆盖,比方说
- checkout 到另外一个分支,但是另外分支的代码和你本地的修改有冲突
- pull 远程的代码,但是这些远程代码和你本地的修改有冲突(其他人改了东西 push 了上去)
等等原因,等我遇到了再更新。
可以有这些解决方案
- 把这些本地修改提交掉
- 如果这些修改还不适合提交,可以 git stash 暂存一下
- 如果这些代码不想要了,可以 git reset --hard HEAD
所有的操作都是一个目的,把 working tree 变成干净的(clean)的。
你学废了吗?下课!
记得关注点赞交个朋友!不定期更新自己学到的小知识~
转载自:https://juejin.cn/post/7110510377485467662