git rebase from master to remote branch。!

git rebase from master to remote branch。!

问题描述:

我已经使用Google,并阅读了很多文档。 但不幸的是我不明白他们全部git rebase from master to remote branch。!

我的情况是。

git branch -r 
origin/HEAD -> origin/master 
origin/master 
origin/team/myteam 

git branch -a 
master 
team/myteam 
remotes/origin/HEAD -> origin/master 
remotes/origin/master 
remotes/origin/team/myteam 

,现在我想每一个补丁从主合并到远程mybranch

我试图

git的结帐队/ myteam

git的重订主

git status 
On branch team/myteam 
Your branch and 'origin/team/myteam' have diverged, 
and have 238 and 18 diffrent commits each, respectively. 
nothing to commit, working directory clean 

似乎工作..但push返回错误..

我用格里特。

git push origin HEAD:refs/for/team/mybranch 
... 
.. 
remote: Resolving 
deltas: 100% (14481/14481) remote: Processing changes: refs: 1, done 
To ssh://156.xxx.xxx.xxx/xxx ! [remote rejected] HEAD -> refs/for/team/myteam (change 228 closed) 
error: failed to push some refs to 'ssh://156.xxx.xxx.xxx/xxx 
+0

_but推返回错误.._ - 什么错误? – 1615903 2013-05-06 09:08:27

+0

返回什么错误? – 2013-05-06 09:08:38

+0

谢谢你们,我编辑了我的错误信息。 – 2013-05-06 09:12:40

我假设你要推到origin/team/myteam,你是最新的team/myteam

如果衍合team/myteammaster,你重写你的分支team/myteam的历史记录,以便Git不会让你因为它与它在origin/team/myteam历史冲突推。

如果你确定你想要做的(重写原点回购历史)什么,你可以强制推带:

git push --force 

要注意的是你的队友可能会遇到麻烦时,他们会拉origin/team/myteam :不推荐重写共享历史记录。

你可能想要做一个merge而不是rebase:在这种情况下,你可以做一个简单的推动,你将跳过潜在的麻烦。

+0

对,如果是,推荐将主人的提交推送到origin/team /我的团队? – 2013-05-06 09:18:53

+0

建议合并,请参阅我编辑的答案。 – cexbrayat 2013-05-06 10:37:39

+0

你从来没有做推和gerrit不允许默认默认 – forvaidya 2013-05-06 10:58:44

1)由于您使用格里特,你会得到改变被关闭,这意味着你不能推动同ChangeID

2)你的工作流程是不正确 你应该做的git获取原点,然后git的重订起源主&提交并推送

您的问题是工作流程之一。

由于在推送到远程设备之前,您并没有在团队/ myteam分支下历史性地重新发起master,所以没有force push这是不可能的。它之前没有重新设计过,这就是分支机构分化的原因。在目前的状况下,如果没有力量推动,重新启动的合并到遥控器是不可能的。一般来说force push不是一个好的选择,除非没有其他人使用远程分支。

有很多方法可以解决您的本地和远程分支出现分歧的问题。

  • 你可以在本地做git merge然后git push让远程分支更新。这可能是最简单的。
  • 您可以弃用现有的远程分支,并推送给您的团队的新远程分支,然后与团队成员协调开始使用新的远程分支。
  • 您可以将force push发送给远程myteam分支,并与团队成员协调将强制推送与其本地存储库合并。这可能是痛苦的。

要在myteam(即branchname)上执行git合并,您可能需要删除本地分支以便进行干净合并。它是git branch -D branchname删除本地分支。然后......

git checkout branchname 
git pull -r origin branchname 
git merge master 
git push origin branchname 

在未来,你应该每推到远程前衍合与主当地的分支机构。有更快的方法来实现rebase比下面写的命令,但我做了这个详细的演示目的。

git checkout mybranch 
git fetch 
git rebase origin/master 
git push origin HEAD:refs/for/team/mybranch 

PS。对不起,我不知道格里特。

PPS。在git中,force push是两个操作的组合,delete远程分支和push本地分支到远程。