我是否需要 git 拉动不止一次?

Do I ever have to git pull more than once?

我在一个团队中工作,我 git 从某个分支撤回了一段时间,做了一些更改,将我的更改推送到那个分支,现在我希望做更多更改到同一分支。

我是否必须从同一个分支再次拉取,或者我可以编辑好文件以便稍后推送?

如果我知道自从我第一次拉动后有人对该分支进行了更改,我是否只需要再次拉动?

如果有其他人在同一分支上处理不同的文件,那么您将必须先 git 拉取,然后再执行 git 推送。 否则,如果您正在处理的分支没有变化,则无需 git 再次拉取

git pull 从远程获取更改并将它们集成到您的分支中。如果远程没有任何对您的分支来说是“新”的更改,则您不需要使用 pull.

一般来说,git的设计允许任意数量的开发人员在同一个分支上进行协作,即使他们之间的通信相对松散。因此,如果您的分支上有其他开发人员处于活动状态,那么定期拉取可能对您很有用,这样您的更改就不会在没有定期合并解决方案的情况下与他们的更改相差太多。

但是你唯一一次 pull 是当 (a) 你的分支和远程分支实际上发生了分歧(即每个都有变化,另一个没有' yet have), (b) 你想推动你的改变。如果你在这种情况下尝试不拉动就推,git 会警告你并拒绝推送[1]。

所以有些人养成了先拉再推的习惯,而其他人只是推,让 git 告诉他们是否必须先拉。如果推送频繁 and/or 你倾向于在孤立的分支上工作,那么也许这就是你需要的拉动;或者,也许您的工作方式更频繁地拉动会减轻合并的工作。这正是您和您的团队必须为您的项目解决的问题。


[1] 当 git 发出需要拉取的警告时,有一种方法可以避免拉取,但几乎总是会得到错误的结果。这称为强制推送,只有当您知道要丢失任何冲突的更改时它才有用。我提到它只是为了完整性,因为它不适用于您描述的情况。

Git 不会与网络通信,除非您使用 pushfetchpull 之类的命令明确告诉它(这只是 fetch + merge)。所以是的,您需要 pullfetch 定期查看远程存储库中的更改。

因为您能够推送,我们知道在 origin 上没有对 feature 进行更多更改。 git push 不会为您合并,当您推送时,您必须是最新的。

Do I have to pull again from that same branch, or are the files I have good to make edits to then push at a later date?

让 Git "distributed" 的原因是您可以继续在本地进行更改,然后将它们与上游的任何更改进行协调。如果您在本地进行更改,而其他人在远程进行更改,那么当您 git pull 时,这些更改将合并在一起。 git pull 是一个 git fetch 加上一个 git merge.

这是一个示例,其中对远程分支(提交 F 和 G)以及本地(提交 1 和 2)进行了一些编辑。

origin

A - B - C [master]
     \
      D - E - F - G [feature]

local

          [origin/master]
A - B - C [master]
     \
      D - E [origin/feature]
           \
            1 - 2 [feature]

如果您尝试推送此内容,Git 将不允许。您的分支机构有 "diverged"。 git push 不会为您合并。您需要 git pull 才能了解最新信息。

如果您 git pullfeature 已签出 Git 将 git fetch 最新版本然后 git merge origin/feature.

# Illustrating `git pull` as two steps

$ git fetch origin

          [origin/master]
A - B - C [master]
     \
      D - E - F - G [origin/feature]
           \
            1 - 2 [feature]

$ git merge origin/feature

          [origin/master]
A - B - C [master]
     \
      D - E - F - G [origin/feature]
           \       \
            1 - 2 - M [feature]

现在你已经是最新的了,可以安全推送了。

如果您想检查更改,但不想合并它们,定期 git fetch.

是安全的