2013-05-06 190 views
3

我已經使用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

回答

0

我假設你要推到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

1)由於您使用格里特,你會得到改變被關閉,這意味着你不能推動同ChangeID

2)你的工作流程是不正確 你應該做的git獲取原點,然後git的重訂起源主&提交併推送

3

您的問題是工作流程之一。

由於在推送到遠程設備之前,您並沒有在團隊/ 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本地分支到遠程。