【问题标题】:When do I need to pull before I can push in Git?在我可以推入 Git 之前,我什么时候需要拉取?
【发布时间】:2014-12-09 11:53:22
【问题描述】:

如果 AB 正在处理同一个 git repo 并且 A 将更改推送到功能分支:A-feature 到repo BEFORE BB现在需要先拉动,然后才能推。

但是描述的确切条件在哪里?例如。它是否适用于推送到 repo 的任何分支上的任何更改?还是只有当 AB 推送到同一个分支时?这意味着 B 可以推送到 B-feature,即使 A 只是在他之前推送了 A-feature

【问题讨论】:

  • 应该可以在没有拉取的情况下推送到不同的分支

标签: git


【解决方案1】:

这意味着即使 A 刚刚在他之前推送了 A-feature,B 也可以推送到 B-feature?

是的。只有当您推送到由其他人更新的分支时才会收到警告:

hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.

git pull 的唯一替代方案是git push --force(如果B 继续推进A-feature,它将用B 覆盖A 发布的历史记录,那就是不好。)。
见“git push --force, behind the scenes”。

如果除了B 之外没有人在处理B-feature,当B 想要将本地B-feature 分支推送到上游仓库时不需要拉动:推送将是快进的:你是在远程分支上添加新的提交。

【讨论】:

  • 可能值得一提的是强制推送。
  • @Jubobs 是的。我添加了一个旧答案的链接,它说明了git push --force 的效果:stackoverflow.com/a/23434601/6309
  • 酷。手边有一大堆旧答案真是太好了:)
【解决方案2】:

B 在他(或她)可以将自己的更改推送到同一分支之前需要拉入 A 的更改的原因是,否则 B 将重写历史记录(删除 A 的提交以支持自己的提交),并且A 的提交(不属于 B 的本地分支)将会丢失。

只有当你推送到同一个分支时才会出现这种情况,所以是的,B 可以推送到另一个分支,而不必先拉 A 的提交。在这种情况下,A 和 B 的提交将在稍后合并它们的分支时进行。

如果您确实想要推送到远程分支,即使它包含不在本地分支中的提交,您可以指示 git 不要警告您并继续推送,使用git push --force(或git push -f)。 但是,要小心,因为在大多数情况下(尤其是当您与其他人一起工作时),这样做是不可取的。 不在您本地分支中的提交将从中删除远程分支。

【讨论】:

    【解决方案3】:

    Git 中的每个分支都是按时间顺序排列的提交。

    当您想要推送不是基于该分支的最新提交的提交时,您需要先拉取中间提交(这可能涉及手动合并)。

    只有当多个用户推送到同一个分支时才会出现这个问题。当每个用户在个人分支上单独工作时,他们将永远不必在推送之前拉取。当然,除非他们有意合并其他人的分支。

    【讨论】:

      猜你喜欢
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      • 2010-09-21
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      相关资源
      最近更新 更多