3 回答

TA貢獻1830條經驗 獲得超3個贊
Git在計算要還原的差異時使用的算法要求
還原的行不會被以后的任何提交修改。
歷史上以后沒有其他“相鄰”的提交。
“相鄰”的定義基于上下文差異的默認行數,即3。因此,如果“ myfile”的構造如下:
$ cat >myfile <<EOF
line 1
junk
junk
junk
junk
line 2
junk
junk
junk
junk
line 3
EOF
$ git add myfile
$ git commit -m "initial check-in"
1 files changed, 11 insertions(+), 0 deletions(-)
create mode 100644 myfile
$ perl -p -i -e 's/line 2/this is the second line/;' myfile
$ git commit -am "changed line 2 to second line"
[master d6cbb19] changed line 2
1 files changed, 1 insertions(+), 1 deletions(-)
$ perl -p -i -e 's/line 3/this is the third line/;' myfile
$ git commit -am "changed line 3 to third line"
[master dd054fe] changed line 3
1 files changed, 1 insertions(+), 1 deletions(-)
$ git revert d6cbb19
Finished one revert.
[master 2db5c47] Revert "changed line 2"
1 files changed, 1 insertions(+), 1 deletions(-)
然后一切都按預期工作。
第二個答案非常有趣。有一個尚未正式發布的功能(盡管它在Git v1.7.2-rc2中可用)稱為恢復策略。您可以像這樣調用git:
git revert --strategy解決 <commit>
并且應該可以更好地弄清您的意思。我不知道可用策略的清單是什么,也不知道任何策略的定義。

TA貢獻1847條經驗 獲得超11個贊
有四種方法:
干凈的方法,還原但保留日志中的還原:
git revert --strategy resolve <commit>
嚴厲的方式,只刪除最后一次提交:
git reset --soft "HEAD^"
注意:避免使用,git reset --hard因為它還會丟棄自上次提交以來文件中的所有更改。如果--soft不起作用,請嘗試--mixed或--keep。
重新設置基準(顯示最近5次提交的日志,并刪除不需要的行,或者重新排序或將多個提交壓縮為一個,或者執行其他任何想要的操作,這是一個非常通用的工具):
git rebase -i HEAD~5
如果犯了一個錯誤:
git rebase --abort
快速變基:使用其ID僅刪除特定的提交:
git rebase --onto commit-id^ commit-id
替代方法:您也可以嘗試:
git cherry-pick commit-id
另一個選擇:
git revert --no-commit
作為最后的選擇,如果您需要完全的歷史記錄編輯自由(例如,由于git不允許您編輯想要的內容),則可以使用此非??焖俚拈_源應用程序:reposurgeon。
注意:當然,所有這些更改都是在本地完成的,git push此后您應該將更改應用到遙控器。并且如果您的倉庫不想刪除提交(“不允許快速轉發”,當您想刪除已經推送的提交時會發生這種情況),您可以git push -f用來強制推送更改。
注意2:如果在分支上工作并且需要強制執行推送,則應絕對避免,git push --force因為這可能會覆蓋其他分支(如果您在其中進行了更改,即使您當前的結帳在另一個分支上)。強制推送時,總是選擇指定遠程分支:git push --force origin your_branch。

TA貢獻1851條經驗 獲得超5個贊
您的選擇介于
保持錯誤并引入修復程序,并
刪除錯誤并更改歷史記錄。
您應該選擇(1)如果其他任何人都接受了錯誤的更改,則選擇(2)如果錯誤僅限于未按下的私有分支。
Git恢復是一種自動執行的工具(1),它會創建一個新的提交來撤消某些先前的提交。您將在項目歷史記錄中看到錯誤和刪除,但是從您的存儲庫中提取信息的人員在進行更新時不會遇到問題。在您的示例中,它不是自動運行的,因此您需要編輯“ myfile”(刪除第2行),執行git add myfile
并git commit
處理沖突。然后,您將在歷史記錄中獲得四次提交,而提交4將還原提交2。
如果沒有人關心您的歷史記錄更改,則可以重寫它并刪除提交2(選擇2)。最簡單的方法是使用git rebase -i 8230fa3
。這將使您進入編輯器,并且可以通過刪除提交(并在其他提交消息旁邊保持“ pick”)來選擇不包括錯誤的提交。請仔細閱讀這樣做的后果。
- 3 回答
- 0 關注
- 585 瀏覽
添加回答
舉報