基本 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 pull1

git pull 命令的意思是:

    运行git fetch;那么 运行第二个 Git 命令,通常是 git merge,除非我指定了 git rebase

作为 Git 初学者,最好使用这两个单独的命令。当然,必须输入额外的 11 个(合并)或 12 个(变基)字符有点烦人,但是您可以查看现在各个步骤的作用。

git fetch 命令让您的 Git 访问其他 Git 存储库 — 在保存的 URL 上,从您之前使用 git clone 获取存储库的任何位置开始 — 并从它们那里获取任何新的他们有你没有的承诺。

git mergegit 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 工作流程:为啥我提取的分支中的代码尚未提交?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Git 说我的主分支“已经是最新的”,即使它不是?

git

如何使用git命令从分支拉取代码到本地,修改后提取代码到该分支,看这一篇就够了!

DevOps与Git之间的代码提取与上传

试图理解/确定一个基本的 Git 工作流程

git:为啥我不能在壁球合并后删除我的分支?