![](/img/trans.png)
[英]Do I have to force push from my local repo to my origin when rebasing from upstream during a pull-request?
[英]Git rebasing issue - should I “push --force origin”
我似乎搞砸了我的git repo,可能是犯下了“不要重新提交你已經推送到公共存儲庫的提交”的罪行。
場景是這樣的:
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 fetch
和git diff devel origin/master
來檢查你添加和刪除的東西,並記住在--force
其他開發人員將收到警告之后並且可能需要改變並重新推動他們的變化。
git rebase --skip
你跳過你的開發提交,而不是取得主人的提交; 一些說明:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.