簡體   English   中英

Git通過合並撤消更改

[英]Git undo changes by merge

我將本地倉庫回滾到提交,然后進行了一些本地更改。 現在我想用我的本地倉庫更新(簡單地覆蓋)遙控器。 但當我做了一個git pull時,終端顯示出一堆沖突。 我不想遠程更改,我只想提交本地文件。

我讀到了某個地方

git checkout --ours

我跑得像

 git checkout --ours .

但是當我執行git status后運行命令它顯示了之前的狀態。

據我所知,你想要用本地分支中的任何東西覆蓋你的遠程分支。

這可以通過使用-f force選項或git push命令中的--force-with-lease選項來實現。 讓您的本地分支處於您想要的狀態並執行:

git push -f origin <remoteBranch>

但要小心 ,這個動作有后果,我強烈建議你閱讀這個答案: https//stackoverflow.com/a/10510482/1695393

此外,當你執行git pull ,git會嘗試合並遠程和本地分支,這將撤消你准備本地分支的工作。 既然你想“覆蓋”遙控器,我建議你跳過拉。

如果你現在仍然處於這種不潔凈的狀態,你可能想要進行git reset --hard將你的本地存儲庫重置為它在你最后一次拉動之前所處的狀態。

git checkout --ours只支持簽出一個文件。 所以你輸入git checkout --ours . 它不會像你期望的那樣工作。

所以在這種情況下,你必須運行git checkout --ours [path_to_your_conflict_file]

如果您有太多沖突文件,可以運行以下命令:

for f in `git ls-files -m`;do git checkout --ours $f; done;

你想保留遠程回購中的歷史記錄嗎? 還有其他人退出嗎? 如果這兩個問題的答案都是“不”,那么你可能只想擺脫沖突並強行推動。

git reset --hard <commit to keep>
git push --force origin <remote branch>

如果您確實希望將歷史記錄保存在遠程倉庫中和/或某人已經撤消,您可以這樣做:

git reset --hard origin/<remote branch> # Erase changes (conflicts) in your working copy
git reset --soft <commit to keep>
git commit --all --message "Commit message with reason for restoring" 
git push

正如@dubes寫道,要注意力推動可能帶來的負面后果。

暫無
暫無

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

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