rebase 后的 Git 推送

标签 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...

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

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

或者 pull 再次处理 merge 冲突......并最终处于相同的情况?
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.

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

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

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

我已经阅读了很多关于此的主题,唯一的解决方案似乎是使用 --force
这对我来说似乎是一个解决方案,对于这种常用工具......

最佳答案

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

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

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

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

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

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

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

关于 rebase 后的 Git 推送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56125354/

相关文章:

git - 在git中更改分支的根

git - 如何将多个 merge 压缩为一个 merge ?

Git,编辑所有分支的根提交

git - 在 git init 上设置默认目录结构

git - 如何卡住存储库中的文件

Primefaces push 和 Wildfly

Git 存储库大小和 git 推送大小

git - "git clean -f"不留下空目录

php - 解析.com : send push notification from my own CMS

Git:如何将一个 Remote 从另一个 Remote rebase