Skip to content

Instantly share code, notes, and snippets.

@irof
Last active May 31, 2020 12:36
Show Gist options
  • Save irof/64e6b4b58ca7ce5b825980334c54b0cd to your computer and use it in GitHub Desktop.
Save irof/64e6b4b58ca7ce5b825980334c54b0cd to your computer and use it in GitHub Desktop.
gitのreflogでブランチ消しても辿れるって話
git init
git commit --allow-empty -m"1"
git commit --allow-empty -m"2"
git checkout -b test-branch
git commit --allow-empty -m"3"
git commit --allow-empty -m"4"
git checkout master
git branch -D test-branch
git reflog
4fa261e (HEAD -> master) HEAD@{0}: checkout: moving from test-branch to master
190ada7 HEAD@{1}: commit: 4
14efea7 HEAD@{2}: commit: 3
4fa261e (HEAD -> master) HEAD@{3}: checkout: moving from master to test-branch
4fa261e (HEAD -> master) HEAD@{4}: commit: 2
f894254 HEAD@{5}: commit (initial): 1

git-reflog-test.sh を任意の空ディレクトリで実行してください。 reflogの出力 のようなのが見えるはずです。 普通に見ると master ブランチのcommit(コメントとしては1,2のもの)しか見えず、commitが失われたように見えますが、reflogで見るとご覧の通り残ってます。( 190ada7 などのコミットハッシュは違うものになります。これはcommitに時間やauthorなどが含まれるため。)

と言うことで、gitはcommitさえしてれば多少変なことしてもreflogで取り戻せます。

  • ブランチを消してしまった
  • rebaseしてしまった

などの操作でcommitを失っても、reflogでcommitを見つけられれば、後はそのcommitをcheckoutするなりmergeするなりcherry-pickするなりお好きにどうぞ。 過信は禁物ですが「やってしまったー!」などで気づいたくらいなら大体間に合いますので、落ち着くといいです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment