Git 变基后推送

Git push after 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...

git 确实是在告诉我在进行变基之后(处理 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.

我在本地有:feature branch, master(最新)

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

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

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

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

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

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

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

如果你变基(并因此为你的分支创建了一个新的提交链),你的分支和远程分支就会发生分歧,这是可以预料的。你故意让他们分道扬镳。例如,您的分支不是最新的 master,因此您将其变基到 master 之上的 "move it"(从技术上讲,提交是从新基重新创建的,在这种情况下 master 但实际上它看起来好像已被移动)。所以您 知道 他们有分歧,您的本地版本是正确的。在这种情况下,可以告诉 git: "Take this version, discard the one you have".

但是,如果您与同一个分支上的人一起工作,并且一个人在您进行自己的更改时推送新更改的分支,那么当您想要推送时,Git 也会告诉您你当地的分支机构和它的上游分道扬镳,所以你应该先拉,依此类推。 在这种情况下重要的是不要push --force否则你同事的作品会被抹掉,he/she会很漂亮沮丧的。所以在这种情况下你确实必须首先 pull (我建议 pull --rebase 不要创建合并提交,并保持你的历史更清晰,但这是非常主观的),然后 push (以及之后拉动,不需要 --force

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

回到原来的情况,你重新调整了你的分支,所以它发散了(根据定义),所以如果你单独在分支上工作,或者如果你确保同时没有人在它上面推送任何东西, git push --force 就是你所需要的。