基本 Git 工作流程:为啥我提取的分支中的代码尚未提交?
Posted
技术标签:
【中文标题】基本 Git 工作流程:为啥我提取的分支中的代码尚未提交?【英文标题】:Basic Git Workflow: Why is code in branches I pull not already committed?基本 Git 工作流程:为什么我提取的分支中的代码尚未提交? 【发布时间】:2022-01-03 03:54:13 【问题描述】:嗨
我最近尝试拉下一个 master 分支以合并到我的 dev 分支中,并注意到自上次拉出以来对 master 所做的所有更改都没有提交。只是想看看是否有人可以解释为什么会这样,以及为什么更改不会从主分支自动提交。
【问题讨论】:
这是什么意思? in 分支中的代码不能不 提交。分支指向提交,它们本身不包含任何代码。 所以,如果我拉下了我的 master 分支(刚刚运行了 git pull),并且在运行 git status 时看到一堆未提交的更改,我是否遇到了问题?如果分支指向提交,我希望看到我的 master 分支是最新的,其中包含对 master 的最新提交。相反,当我运行 git status 时,我看到每个文件都显示为未添加...这是预期的行为吗?希望这有助于澄清我的问题,我不记得上次使用 github 时必须下拉然后立即提交。 您在拉取之前有未提交的更改,或者您的 git pull 更新了您的 gitignore,这使得某些文件不再被忽略,因此现在显示为未跟踪。 【参考方案1】:不要使用git pull
。1
git pull
命令的意思是:
-
运行
git fetch
;那么
运行第二个 Git 命令,通常是 git merge
,除非我指定了 git rebase
。
作为 Git 初学者,最好使用这两个单独的命令。当然,必须输入额外的 11 个(合并)或 12 个(变基)字符有点烦人,但是您可以查看现在各个步骤的作用。
git fetch
命令让您的 Git 访问其他 Git 存储库 — 在保存的 URL 上,从您之前使用 git clone
获取存储库的任何位置开始 — 并从它们那里获取任何新的他们有你没有的承诺。
git merge
和git rebase
命令在提交 上运行。如果您还没有对任何您想要的更新做出任何提交,那么它们就不会做好事:他们什么也不做,或者做坏事。2
如果git merge
说你需要先提交,你会看到你需要先提交。如果您使用git pull
,它应该产生相同的投诉,但是——尤其是如果你告诉它使用 rebase 和 autostash——它在某些情况下不会这样做。
git pull
似乎插入的额外“魔法”使初学者认为它比实际做的更多,然后当它没有做他们想要的事情时他们会感到困惑。它从未真正做到过,但有时它所做 所做的事情恰好足够好并达到了相同的效果。换句话说,使用git pull
会助长不良习惯,最终会再次困扰您。所以不要使用git pull
。
1这是 Git 初学者的规则。对于中级用户,它是“现在你了解它的作用,如果你想使用它”,而对于高级用户,它是“现在你了解它的作用,不要使用它,因为你知道你不想要那个。” ? 更严重的是,在最新的 Git 版本(2.30+)中,git pull
有一些配置旋钮,使其在某些情况下更有用,但你肯定需要知道如何处理失败情况。
2在 Git 1.5 左右的糟糕旧时代,git merge
运行未提交的工作,可能会造成很大的混乱,在部分合并后您永远无法恢复原来的工作用合并冲突破坏了它。一个人学会了在没有先运行git status
来检查所有内容是否已提交之前不要运行git merge
。
现代 Git 通常要好很多,但先检查仍然是一个好习惯。
【讨论】:
以上是关于基本 Git 工作流程:为啥我提取的分支中的代码尚未提交?的主要内容,如果未能解决你的问题,请参考以下文章