2014-07-08 109 views
1

這是我平時做我的工作:的Git分支衍合

git checkout -b my_branch 
git commit -m 'fixed something #8852' 
git rebase -i master 
git push origin my_branch 

然後一段時間後,我需要在同一分支上工作了。從那時起,新的提交出現在主分支上。我檢查了我的分支,進行了更改,提交併做了'git rebase -i master'。但是,當我試圖做「混帳推起源my_branch」它給了我一個錯誤:

! [rejected]  my_branch -> my_branch (non-fast-forward) 
error: failed to push some refs to 'https://github.com/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. 

我的主人是最新的。所以從my_branch我做了

git pull --rebase origin my_branch 
git push origin my_branch 

我認爲它重新設置了所有新的提交到我的分支。現在在my_branch上我有不屬於它的提交。注意:我的團隊領導要求我總是進行rebase來避免合併。我應該如何解決這個錯誤,以便my_branch只包含我的提交?

回答

0

錯誤的意思是說你的遠程分支比你的本地分支更高級(在樹中)。這種情況往往發生在您合作和重新配售時。建議如果您遵循您需要與其他人員分支協作的方法,則應合併。如果你做一個快速的谷歌搜索,你會發現很多好的git教程,可以幫助你更好地使用它!

現在,爲了解決您的問題,有幾個解決方案。我認爲是最好的之一將是:

  • git log,並寫下你想擁有的提交哈希值
  • 圍棋(你可以複製它們的地方粘貼)到一個安全的出發點和創建新分支(git checkout -b branch_name
  • 櫻桃挑選您想要對新分支提交的提交(git cherry-pick commit-hash),如果它們有很多提交,您可以與舊分支進行交互式轉化並選擇所需的提交。
  • 對您的新分支感到滿意,它擁有您想要擁有的所有信息,而沒有其他任何信息。
0

當你是主人,而你做git checkout -b my_branch你是最新的那一刻。

後來,在你的分支上做了一些工作之後,你會想要從master更新那些東西,所以你做一個git pull master這是好的。

一旦你很好,一切正常,那麼你通常會有代碼審查過程發生,並批准。

如果這是政策,經理可以在主人身上並執行git rebase my_branch

所以,這個問題就出現在重新設計和重新排列雙向歷史中。