簡體   English   中英

Git rebasing問題 - 我應該“推動 - 強制起源”

[英]Git rebasing issue - should I “push --force origin”

我似乎搞砸了我的git repo,可能是犯下了“不要重新提交你已經推送到公共存儲庫的提交”的罪行。

場景是這樣的:

  • 我跟蹤我的主分支中的上游存儲庫的更改,我將自己的更改保存在名為devel的分支中。
  • 當上游存儲庫發生變化時,我將其拉入主分支。
  • 然后我結帳devel並在其上做一個rebase master ,在master分支上進行自己的更改。 這會導致原因沖突,在幾個提交中出現以下錯誤消息(我在下面只包含其中一個作為示例):

回到修補基礎和3向合並...自動合並public / scala / qscript / org / broadinstitute / sting / queue / qscripts / AlignWithBWA.scala CONFLICT(內容):在public / scala / qscript / org中合並沖突/broadinstitute/sting/queue/qscripts/AlignWithBWA.scala無法合並更改。 修補程序在0038失敗。添加了對索引文件的檢查。

當你解決了這個問題后,運行“git rebase --continue”。 如果您希望跳過此補丁,請運行“git rebase --skip”。 要檢查原始分支並停止重新運行“git rebase --abort”。

  • 然后我使用git rebase --skip跳過導致問題的提交,最后我得到了我想要的代碼。

現在,問題是, 每次我想要改變我必須經歷這個程序。 我有什么方法可以避免將來發生同樣的沖突嗎? 我的想法是使用push --force origin devel來覆蓋遠程倉庫中的歷史記錄而不會導致沖突。 這是要走的路嗎? 或者還有其他方法可以解決此問題嗎?

假設上游不重寫公共歷史記錄,您應該調整您的提交,以便在master的最新代碼之上工作。 相反,您正在跳過沖突的提交。 您需要改為解決沖突,然后使用git add標記它們,然后git rebase --continue (而不是--skip )。

沖突持續發生的原因是因為您每次都在跳過它們。

執行git push --force會為使用分支的其他人重寫公共歷史記錄(您可以刪除或重新排序他們已經下拉並在其上工作的提交)。 最好避免這種情況。

推力應該只在最嚴峻的情況下進行。

如果您開始工作后其他人對遠程分支進行了任何更改,您將完全覆蓋它們。

所以你最好手動解決沖突。

如果代碼在同一行上有更改,則需要手動解決。 使用武力不是“解決”它們的方法。

你不會每次都能得到沖突,如果這是你的經歷,那就是你正在學習的時候,在你做這個,試驗和學習的時候,有些事情可能會被解決。

另一個需要考慮的選擇可能是只需要獲取代碼,制作副本,刪除-r .git目錄並為其創建一個新的git repo(git init)。

我不認為git push --force在這里是個好主意。 在任何情況下,在使用git push --force之前你應該做一些事情,比如git fetchgit diff devel origin/master來檢查你添加和刪除的東西,並記住在--force其他開發人員將收到警告之后並且可能需要改變並重新推動他們的變化。

  1. 我希望用git rebase --skip你跳過你的開發提交,而不是取得主人的提交;
  2. 在“rebase”之后應該能夠在沒有“--force”的情況下推送(除非新的提交很快到達那里需要另一個fetch / rebase循環)。

一些說明:

  • 如果您不想一遍又一遍地解決相同的沖突,可以使用“git rerere”
  • Git自動將遠程內容鏡像為“origin / master”,您可以使用“git fetch”來更新它。 然后你可以在你的開發中使用“git rebase origin / master”而無需來回切換到“master”分支。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM