LoginSignup
3
0

More than 3 years have passed since last update.

Gitをイマイチちゃんと理解出来てなかったので、調べてみた

Posted at

ファイルの保存領域

  • ワーキングツリー
  • ステージング(インデックス)
  • リポジトリ

上記の3種類があるそうです。ただ、この説明だとイマイチ自分自身ピント来なかったので、おなじみの作業開始時・add・commitをしたときにステージングやリポジトリがどう変化するか図示してみます。

とりあえず、3回コミットした状態から作業を開始する前提です。
test.jpg

とりあえず新しく作業した

まだ add も commit もしていない状態です。
notadd.jpg

add した↓

なにかファイルに修正などを加えて
git add .
add.jpg

commitした↓

git commit -m 'コメント’
commit.jpg

commitを取り消したい

よく分かってなかった、reset コマンド
基本的にresetコマンドはcommitを取り消すためのコマンドですが、保存領域が3つあるので、オプションによってどれをどこまで戻すか指定します。

状態としてはA > B > C > D と4回コミットしてそこからDの内容を取り消したい。という状態を想定します。

①全てなかったことに 【reset --hard】

git reset --hard HEAD^

commit.jpg
↑これが、こうなります↓
test.jpg

使用頻度は一番低いかと思います。ステージングもワークツリーも全て過去に戻りますので、作業を全くしていない状態に戻ります。

②HEADだけ戻したい(commitする前) 【reset --soft】

git reset --soft HEAD^

commit.jpg
↑これが、こうなります↓

add.jpg

③ステージングも戻したい(addする前) 【reset --mixed or オプションなし】

git reset --mixed HEAD^
commit.jpg
↑これが、こうなります↓
notadd.jpg

gitで追跡する必要のないlogファイルなどをaddしてしまった時に使えるかと。

リモートにPush済みのcommitを取り消した

まだ、リモートにPushする前であれば、上記のresetコマンドでの対応でも問題ないかと思います。ただ、リモートにPushしたあとに、やっぱり取り消したいという場合は、resetコマンドを使ってしまうと再度プッシュする際にerrorが出てしまいます。

リモートには
A > B > C > D
まで記録されているが、ローカルではCからの作業追加をプッシュする形となるため。
git push -f
などで強制的にリモートをローカルで上書きする方法もありますが、危険性が高いので避けた方がいいか
と。

revert で打ち消す

git revert HEAD^
commit.jpg
↑これが、こうなります↓
revert.jpg

revertコマンドでは、変更内容を相殺するcommitをしてくれます。
なので、DからCへ戻しました。という履歴も残ります。

この場合再度、pushしてもエラーになりません。

参考にさせて頂いたサイト

図示するソフトを探す

図があったほうがわかりやすいと思いドローイングソフトを探すところからはじめました。
https://dev.classmethod.jp/etc/drawing_tools/

実際に使ったドローイングソフト

最後に

githubも理解が浅いため、またググって、投稿しようと思います。
おかしな点あれば、まさかりいただけると幸いです。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0