我知道这已经被问过了,但是我似乎无法将这个事情包裹住……
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:th项冲突)
我有两个选择,使用--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.
我在本地:功能分支,主管理员(最新)
和远程:featureBranch(现在在前面?!)和master。
我只想更新我的功能分支,所以它甚至接近母版上的版本... 为什么git像这样...
我已经阅读了很多有关此的主题,唯一的解决方案似乎是使用--force
对于我来说,对于这种常用工具来说,这似乎是一个解决方案……
答案 0 :(得分:3)
git push --force
原则上没有错。
它的作用是将分支机构的远程头替换为本地分支。
有两种情况,一种情况适用推力,另一种根本不适用。
如果您重新设置了基础(并因此为分支创建了新的提交链),则分支和远程分支将出现差异。并且您使它们故意偏离。例如,您的分支不是最新的master
,因此您将其重新设置基础以使其“移动”到master
的上方(从技术上讲,是从新的基础重新创建提交,在这种情况下,{{ 1}},但实际上看起来好像已经被移动了)。因此,您知道它们有所不同,并且您的本地版本是正确的。在这种情况下,最好告诉git:“获取此版本,丢弃您拥有的版本。”
但是,如果您与同一分支上的人员一起工作,并且一个人在进行自己的更改时以新的更改推送该分支,那么当您要推送时,Git还会告诉您您本地的分支及其分支上游发散,因此您应该先拉等等。 在这种情况下重要的是不要 master
,否则您的同事的工作将被抹除,他/她将非常沮丧。因此,在这种情况下,您确实必须首先push --force
(我建议pull
不要创建合并提交,并保持历史记录整洁,但这是非常主观的),然后是pull --rebase
(然后是拉动,则不需要push
。
最底线是,知道--force
的作用,知道何时可以用本地脚本覆盖上游(然后可以推力),何时不可以(需要拉动)。
回到原来的情况,您重新设置了分支的基础,因此分支有所不同(根据定义),因此,如果您独自在分支上工作,或者确保同时没有人对它施加任何压力,{{ 1}}是您所需要的。