HEADの位置を変更するgit reset
に関しての備忘録。
オプションによっては、インデックス、ワーキングディレクトリも移動できる。
オプション | 内容 |
---|---|
--soft | HEADのみ移動 |
なし、--mixed | HEADとインデックスを移動 |
--hard | HEAD、インデックス、ワークを移動 |
git reset
-
現在の状態
ローカルリポジトリのHEAD、インデックス、ワークがそれぞれ違う位置ある状態だったとする。
-
ステージされた変更をリセットする
インデックスにaddされた変更が取り消しされる。
> git reset HEAD
-
HEADとインデックスを1つ前の履歴に移動する
インデックスとHEADが現在の位置から1つ前の履歴に移動する。
> git reset HEAD^
-
HEADだけ移動
HEADだけ1つ前の履歴に移動する。
> git reset --soft HEAD^
- HEAD、インデックス、ワークすべて1つ移動
> git reset --hard HEAD^
git log
履歴の個々の変更をログに残して記憶している。このログをレフログ
と呼ぶ。操作のUndoヒストリーといった感じ。
下記例だと、HEAD@{0}
とHEAD@{1}
というコミット履歴がある。
> git log -g
commit 7be9882f771f32848a68f0959841e9cc84ccc45f
Reflog: HEAD@{0} (hoge <hoge@sample.com>)
Reflog message: checkout: moving from master to b03
Author: hoge <hoge@sample.com>
Date: Thu Aug 30 14:18:38 2012 +0900
aaa
commit 1514be563a90c6628d41b6e4a12ce6d8375c5cc8
Reflog: HEAD@{1} (hoge <hoge@sample.com>)
Reflog message: checkout: moving from b02 to master
Author: hoge <hoge@sample.com>
Date: Fri Jul 6 18:39:46 2012 +0900
a4
</hoge@sample.com></hoge@sample.com></hoge@sample.com></hoge@sample.com>
なんらかの操作を取り消したいときなどに、復元ポイント
としてレフログ
を指定してgit reset
する。
> git reset --hard HEAD@{1}
svnとの連携
svnのリポジトリからgitリポジトリへ移行したり、svnリポジトリへgitコマンドでコミットしたりできる。
- svnリポジトリからクローンを作成する
> git svn clone [repository url]
-
svnリポジトリへ変更をプッシュする
svn commitのようなもの
> git svn dcommit
- svnのログを表示する
> git svn log