变基后的 Git 推送

Clo*_*mez 13 git push rebase

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

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

then resolve all the problems....
Try to push - not gonna happen...
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

我在本地有:功能分支,主(最新)

和远程:featureBranch(现在领先?!)和主人。

我只是想更新我的功能分支,所以它甚至接近 master 上的版本......为什么 git 这样......

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

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

pad*_*win 20

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

它的作用是用本地替换分支的远程负责人。

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

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

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

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

回到你原来的案例,你重新定位了你的分支,所以它(根据定义)发散了,所以如果你独自在分支上工作,或者你确保在此期间没有人在它上面推送任何东西,这git push --force就是你所需要的。

  • 谢谢,我仍然认为这太复杂了。所以,既然我要强制替换当前的 featureBranch,这意味着如果有人(其他)正在积极使用 featureBranch,并且有更改,但尚未推送到远程。所有这些“尚未推送”的更改都将丢失(永远),因为不再有 featureBranch 了?我想做的就是让我的分支与主人保持同步哦天啊 (3认同)
  • 如果您与分支上的某人一起工作(这是一件有争议的事情,但这是一个工作流程问题),我建议您执行以下操作:首先(在变基之前)确保您的分支与远程(又名,你拥有遥控器上的所有内容),然后重新调整它以执行你需要的操作(重新设计它,将其置于主控之上......),然后最后推回力。并让您的同事随时了解情况。 (2认同)
  • 我对你最后的评论@phd 略有异议,并会说任何共享分支或基础/父分支(例如 master)一旦推送就应该保持不变。*当你感到足够放心时*,个人功能分支并不重要,我鼓励尽快将它们推送到本地,但仍然毫不犹豫地重新设计它们(虽然它们只是个人功能分支。一旦它们被合并了,它们应该被认为是固定的) (2认同)