2016-10-05 18 views
1

我正在使用bitbucket,並且遇到了使用git的rebase特性的問題。簡而言之,我需要重新應用每次重新綁定時我已經應用的更改。我使用下面的步驟重新創建了該問題。它是一個簡化版本,但結果是一樣的。如何正確使用git工作流與rebase?

  1. 開發人員A創建一個git repo並將contributors.txt添加到master,提交和推送。現在master有一個contributors.txt文件。該文件的內容是 Developer A
  2. 開發人員A從master創建branch-a
  3. 開發者B從master創建branch-b
  4. 開發者A將貢獻者文件追加到branch-a中,看起來像。 Developer A Developer A2
  5. 開發人員B追加貢獻者文件branch-b所以它看起來像 Developer A Developer B
  6. 開發一個承諾,並推動改變遠程branch-a
  7. 開發人員B提交和推動修改遠程branch-b
  8. 開發人員A合併branch-amaster
  9. 開發人員B簽出主服務器並進行提取,以便本地主服務器根據上述步驟8中提到的合併所應用的更改進行更新。
  10. 開發者B簽出branch-b並且git rebase master
  11. 開發者B得到合併衝突。
  12. 開發人員B修復合併衝突,因此文件現在看起來像 Developer A Developer A2 Developer B
  13. 開發人員B確實git add添加固定衝突並運行git rebase --continue。一切順利。
  14. 開發商B拉branch-b由於現在本地和遠程branch-b分歧,他們需要合併。 (需要在拉前設置上游)
  15. 開發人員B解決合併衝突,現在本地branch-b已經從主服務器進行更改並可以推送到遠程。
  16. 開發者B將branch-b推送到遠程。使用git push origin branch-b。一切順利。
  17. 開發者B在branch-b中創建一個新文件並提交。
  18. 顯影劑B然後確實
    • git checkout master
    • git pull(主是最新的,因爲它沒有自上次拉即步驟改變9)
    • git checkout branch-b
    • git rebase master
  19. git rebase master被執行,git要求開發者B再次解決相同的衝突。爲什麼會發生?是否應該不知道已經應用的更改,而不要求再次應用?

我想我可以使用合併而不是rebase來克服這個問題。但是好像我錯誤地使用了rebase。請讓我知道我在做什麼錯了

回答

1

在第13步之後,你應該可以做一個git push origin branch-b --force。這會將重新發布的版本推到branch-b到您的遠程,並且由於它已經在主控之上重新發布,因此您應該能夠與主控合併,而不會有任何問題。

上一個方法的問題是,在重新綁定到master之後,您只需將合併提交添加到origin/branch-b,但尚未重新綁定到master,因此它仍然有分歧。如果您執行強制推送,那麼它只會用您的重定向分支替換遠程分支。

+0

我理解這個解決方案。但在這個問題上我不清楚。一旦我成功完成第13步,是不是將原產地/分支-B重新設置在主設備上? – ysfiqbl

+0

您當地的分支機構b已經重新設計,但原產地/分支機構b並沒有因爲沒有任何推出後被推動。這就是爲什麼當你推動時仍然存在合併衝突。 當您強制推送時,它會用重定版本替換原點/分支b。 –

+0

明白了,謝謝。它現在非常有意義。有沒有另一個工作流程,我應該遵循而不是這個?我猜如果我想用rebase這是做到這一點的方法。 – ysfiqbl