一個項目,fork 出來,修改了其中一個文件,git commit & push,然後獲取上游的更新,並和自己的代碼merge,merge 後我對原來那個文件的修改被合併,變成上游的代碼,現在我想把該文件回退到之前我修改並提交的狀態,但是我用git log 查看的時候出現了標題說明的問題…十分不理解… (圖裡,我是 hyzhang)
專案在這裡
认证高级PHP讲师
因為你用了-2呀,然后合并来的上游修改比你的新,所以你自己的修改排在前2之外了。不要用-2,查看完整歷史,找到你想恢復的版本,checkout出來再commit就可以。
-2
安裝 git extras,然後執行git revert,它會幫你處理所有的事情
試試 git log --pretty=oneline modules.rst
git log --pretty=oneline modules.rst
看到這個介面,我還是要再推薦下 tig
我 clone 了你的库,然后我分别 checkout 到你之前的 commit 上然后创建新的分支,再进行 diff 操作,以下是結果:
clone
checkout
commit
diff
從 fix typo and translation 到 Merge...无 modules.rst 的修改記錄
fix typo and translation
Merge...
modules.rst
從 add... 到 fix typo and translation 仍然无 modules.rst 的修改記錄
add...
從 fix typo 到 add... 终于出现了 modules.rst 的修改記錄
fix typo
所以很明顯 git 的 log 记录没有错,你最近的几次 commit 并没有修改 modules.rst 文件,它又怎么会出现在 log 中呢?
git
log
最近的四次 commit 記錄:
根據git diff 的結果,可以確定從fix typo 到add... 的這次提交中是對modules. rst 最近的操作,所以查看modules.rst 的log 肯定只顯示到add... 這次git diff 的结果,可以确定从 fix typo 到 add... 的这次提交中是对 modules.rst 最近的操作,所以查看 modules.rst 的 log 肯定只显示到 add... 这次 commit了。
git diff
modules. rst
輸入 git log --merges 指令,顯示用於 merge 的 git log --merges 命令,显示用于 merge 的 commit:
git log --merges
merge
發現了嗎?與之前的merge 相比,你這次merge 是存在conflict 的,而且這個conflict 和你的問題文件modules.rst 還有關,所以我分析這應該就是問題所在,應該是你的文件產生了衝突,但是你沒有解決衝突,而又merge 成功,這些衝突不知道什麼原因被忽略,所以它們不會作為merge 相比,你这次 merge 是存在 conflict 的,而且这个 conflict 和你的问题文件 modules.rst 还有关,所以我分析这应该就是问题所在,应该是你的文件产生了冲突,但是你没有解决冲突,而又 merge 成功,这些冲突不知道什么原因被忽略,所以它们不会作为 commit 的一部分进入 log 的一部分進入log 的歷史記錄中。好了,該去休息了,希望答案對題主有幫助。 :)
conflict
因為你用了
-2
呀,然后合并来的上游修改比你的新,所以你自己的修改排在前2之外了。不要用-2
,查看完整歷史,找到你想恢復的版本,checkout出來再commit就可以。安裝 git extras,然後執行git revert,它會幫你處理所有的事情
試試
git log --pretty=oneline modules.rst
看到這個介面,我還是要再推薦下 tig
我
clone
了你的库,然后我分别checkout
到你之前的commit
上然后创建新的分支,再进行diff
操作,以下是結果:從
fix typo and translation
到Merge...
无modules.rst
的修改記錄從
add...
到fix typo and translation
仍然无modules.rst
的修改記錄從
fix typo
到add...
终于出现了modules.rst
的修改記錄所以很明顯
git
的log
记录没有错,你最近的几次commit
并没有修改modules.rst
文件,它又怎么会出现在log
中呢?最近的四次
commit
記錄:根據
git diff
的結果,可以確定從fix typo
到add...
的這次提交中是對modules. rst
最近的操作,所以查看modules.rst
的log
肯定只顯示到add...
這次git diff
的结果,可以确定从fix typo
到add...
的这次提交中是对modules.rst
最近的操作,所以查看modules.rst
的log
肯定只显示到add...
这次commit
了。輸入
git log --merges
指令,顯示用於merge
的git log --merges
命令,显示用于merge
的commit
:發現了嗎?與之前的
merge
相比,你這次merge
是存在conflict
的,而且這個conflict
和你的問題文件modules.rst
還有關,所以我分析這應該就是問題所在,應該是你的文件產生了衝突,但是你沒有解決衝突,而又merge
成功,這些衝突不知道什麼原因被忽略,所以它們不會作為merge
相比,你这次merge
是存在conflict
的,而且这个conflict
和你的问题文件modules.rst
还有关,所以我分析这应该就是问题所在,应该是你的文件产生了冲突,但是你没有解决冲突,而又merge
成功,这些冲突不知道什么原因被忽略,所以它们不会作为commit
的一部分进入log
的一部分進入log
的歷史記錄中。好了,該去休息了,希望答案對題主有幫助。 :)