【问题标题】:Git push after rebase变基后的Git推送
【发布时间】:2019-10-01 04:21:53
【问题描述】:

我知道以前有人问过这个问题,但我似乎无法理解这件事......

git checkout master
git pull
git git checkout feature
git rebase origin/master

then resolve all the problems....
Try to push - not gonna happen...

git 真的在告诉我,在做了一个 rebase 之后(处理 n:ths 的冲突)

我有两个选择,使用 --force,这看起来既危险又愚蠢。

或再次pull 并再次处理合并冲突...并以同样的情况结束?

error: failed to push some refs to 'ssh://git@git.zzz.com/yyy/xxx.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

我在本地有:特性分支,master(最新)

和远程:featureBranch(现在领先了?!)和 master。

我只想更新我的功能分支,使其更接近 master 上的版本... 为什么git会这样……

我已经阅读了很多关于此的主题,唯一的解决方案似乎是使用--force

对于我来说,对于这种常用工具来说,这似乎是一个解决方案......

【问题讨论】:

标签: git push rebase


【解决方案1】:

git push --force 原则上没有问题。

它的作用是用本地替换分支的远程头。

有两种情况,一种推力可以,一种根本不行:

如果您重新设置了基础(因此为您的分支创建了一个新的提交链),您的分支和远程分支会出现分歧,这是意料之中的。你故意让他们分歧。例如,您的分支不是最新的 master,因此您将其重新设置为在 master 之上“移动它”(从技术上讲,提交是从新的基础重新创建的,在这种情况下是 master 但实际上它看起来好像被移动了)。所以您知道它们存在分歧,并且您的本地版本是正确的。在这种情况下,可以告诉 git:“使用这个版本,丢弃你拥有的那个”。

但是,如果您与同一分支上的人一起工作,并且在您进行自己的更改时有人推送带有新更改的分支,那么当您想要推送时,Git 也会告诉您您的本地分支及其上游发散,所以你应该先拉,依此类推。 在这种情况下重要的是不要push --force 否则你同事的工作将被删除,他/她会非常沮丧。所以在这种情况下你必须首先pull(我建议pull --rebase不要创建合并提交,并保持你的历史更清晰,但这是非常主观的),然后是push(在拉动之后,没有--force将需要)。

底线是,知道git push --force 做了什么,知道什么时候可以用本地覆盖上游(然后你可以推力),什么时候不可以(你需要拉)。

回到你原来的情况,你重新设置了你的分支,所以它发生了分歧(根据定义),所以如果你独自在分支上工作,或者你确保在此期间没有人推任何东西,@987654331 @ 是你需要的。

【讨论】:

  • 谢谢,我仍然认为这太令人费解了。所以既然我要强制替换当前的 featureBranch,这意味着如果有人(其他)正在积极使用 featureBranch,并且有变化,尚未被推送到远程。由于不再有 featureBranch,所有这些“尚未推送”的更改都将丢失(永远)?我想做的就是让我的分支与大师保持同步哦,我的上帝
  • 最后一个问题是。
  • 如果你在一个分支上与某人一起工作(这是一个有争议的事情,但这是一个工作流问题),我建议如下:首先(在变基之前)确保你的分支是与遥控器保持同步(又名,你拥有遥控器上的所有东西),然后重新设置它来做你需要的事情(返工,让它在主人之上......),然后最后推回力量。并让您的同事了解最新情况。
  • "所以,既然我要强制替换当前分支,这意味着如果其他人正在积极使用该分支并且没有推送更改,那么所有这些“还没有” -pushed”更改将丢失,因为不再有分支?”没有必要,他们可以通过合并或变基拉取,从而保留他们的更改。 “我要做的就是让我的分支与 master 保持同步”这就是问题所在。为避免您刚刚描述的情况,您绝不能编辑(修改、变基、过滤分支)推送的提交或移动分支指针(重置)。考虑一下刻在石头上的推送提交/分支。
  • 我对您的最后一条评论 @phd 略有异议,并会说任何共享分支或基础/父分支(例如 master)一旦被推送就应该保持不变。 当您感到足够轻松时,个人功能分支并不重要,我鼓励尽快将它们推送到本地没有它们,但仍然毫不犹豫地对其进行返工(虽然它们只是个人特性分支。一旦它们被合并,它们应该被认为是固定的)
猜你喜欢
  • 1970-01-01
  • 2019-07-30
  • 2019-11-30
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多