Git reflog 非常厉害

git reflog -> git 引用日志

通过使用reflog命令,您可以查看在git中进行的操作历史。
此外,您还可以通过使用reset命令来操纵git的操作。

“git的操作是什么意思?” de shì ?)

比如说,

git revert
git revertは、特定のコミットを打ち消すコミットを新しく作成するコマンド。
PRなどをマージ後に取り消したいときに使うお馴染みの操作。
git revert {commit id}

git reset –head HEAD^
コミットを取り消すコマンド。
pushする前であれば、間違えてしまったコミットをやり直したり、取り消したりすることができる操作。
git reset –head HEAD^

这个命令是在对提交进行操作。

你可以使用git reflog来查看操作日志。

% git reflog
e821293 (HEAD -> master) HEAD@{0}: revert: Revert "Merge commit 'edc11a9e0fcfefe8f2a25b6c48eb383a0bca07dc' into feature/test2"
bdeff3a (feature/test2) HEAD@{1}: merge feature/test2: Fast-forward
edc11a9 (feature/test4, feature/test3) HEAD@{2}: checkout: moving from feature/test4 to master
edc11a9 (feature/test4, feature/test3) HEAD@{3}: checkout: moving from master to feature/test4
edc11a9 (feature/test4, feature/test3) HEAD@{4}: checkout: moving from feature/test3 to master
edc11a9 (feature/test4, feature/test3) HEAD@{5}: checkout: moving from master to feature/test3
edc11a9 (feature/test4, feature/test3) HEAD@{6}: checkout: moving from feature/test2 to master
bdeff3a (feature/test2) HEAD@{7}: merge edc11a9e0fcfefe8f2a25b6c48eb383a0bca07dc: Merge made by the 'recursive' strategy.
ad76b54 HEAD@{8}: checkout: moving from master to feature/test2
edc11a9 (feature/test4, feature/test3) HEAD@{9}: commit: add test
d567f03 HEAD@{10}: checkout: moving from feature/test2 to master

在存储库中显示了进行了git操作的历史记录,如revert(还原)、merge(合并)、checkout(切换)和commit(提交)等操作。

在中文中进行git操作。

你可以通过使用先前显示的 git reflog 命令的历史,通过 git reset –hard HEAD@{n} 来撤销在该操作之后进行的操作。

在上面的例子中,假设我们想要将操作还原到“将feature/test2分支快速合并到主分支(master)”这一步。

执行”git reset –hard HEAD@{1}”后,

% git reflog               
bdeff3a (HEAD -> master, feature/test2) HEAD@{0}: reset: moving to HEAD@{1}
e821293 HEAD@{1}: revert: Revert "Merge commit 'edc11a9e0fcfefe8f2a25b6c48eb383a0bca07dc' into feature/test2"
bdeff3a (HEAD -> master, feature/test2) HEAD@{2}: merge feature/test2: Fast-forward
edc11a9 (feature/test4, feature/test3) HEAD@{3}: checkout: moving from feature/test4 to master
edc11a9 (feature/test4, feature/test3) HEAD@{4}: checkout: moving from master to feature/test4
edc11a9 (feature/test4, feature/test3) HEAD@{5}: checkout: moving from feature/test3 to master
edc11a9 (feature/test4, feature/test3) HEAD@{6}: checkout: moving from master to feature/test3
edc11a9 (feature/test4, feature/test3) HEAD@{7}: checkout: moving from feature/test2 to master
bdeff3a (HEAD -> master, feature/test2) HEAD@{8}: merge edc11a9e0fcfefe8f2a25b6c48eb383a0bca07dc: Merge made by the 'recursive' strategy.
ad76b54 HEAD@{9}: checkout: moving from master to feature/test2
edc11a9 (feature/test4, feature/test3) HEAD@{10}: commit: add test

在最近(HEAD@{0})发生的操作中,可以看出对之前的合并提交“revert: Revert “Merge commit ‘edc11a9e0fcfefe8f2a25b6c48eb383a0bca07dc’ into feature/test2″”的撤销操作被取消了。

 % git log
commit bdeff3acf061a8d7793c5f5ad95e3f7e39bf1d86 (HEAD -> master, feature/test2)
Merge: ad76b54 edc11a9
Author: bebeken <xxx>
Date:   Sat Sep 11 16:09:24 2021 +0900

    Merge commit 'edc11a9e0fcfefe8f2a25b6c48eb383a0bca07dc' into feature/test2

commit edc11a9e0fcfefe8f2a25b6c48eb383a0bca07dc (feature/test4, feature/test3)
Author: bebeken <xxx>
Date:   Sat Sep 11 16:08:45 2021 +0900

    add test


此外,在git log中,也能够看到撤销提交已经消失了。

对于我来说…

我觉得如果这次操作只是撤销了前一次操作,但如果我搞砸得更惨的话,那就很有用了。
在我的情况下,由于错误地在本地颠倒了master/主分支/工作分支的合并顺序,我完全撤销了这些操作,对git reflog感到非常惊讶。

git的基本命令就像创造历史的形象,但是我觉得git reflog是一个更高级的命令,可以操作更上层的历史。

顺便提一下,据说用git log -g也可以查看到reflog。

% git log -g
commit bdeff3acf061a8d7793c5f5ad95e3f7e39bf1d86 (HEAD -> master, feature/test2)
Reflog: HEAD@{0} (bebeken <xxx>)
Reflog message: reset: moving to HEAD@{1}
Merge: ad76b54 edc11a9
Author: bebeken <xxx>
Date:   Sat Sep 11 16:09:24 2021 +0900

    Merge commit 'edc11a9e0fcfefe8f2a25b6c48eb383a0bca07dc' into feature/test2

commit e82129307f7db21eb9eccf5dc89fe3acd9a3366f
Reflog: HEAD@{1} (bebeken <xxx>)
Reflog message: revert: Revert "Merge commit 'edc11a9e0fcfefe8f2a25b6c48eb383a0bca07dc' into feature/test2"
Author: bebeken <xxx>
Date:   Sun Mar 19 20:17:15 2023 +0900

    Revert "Merge commit 'edc11a9e0fcfefe8f2a25b6c48eb383a0bca07dc' into feature/test2"
    
    This reverts commit bdeff3acf061a8d7793c5f5ad95e3f7e39bf1d86, reversing
    changes made to ad76b54e8c26013e18fd9ed891285829b44a92f6.
bannerAds