Help us understand the problem. What is going on with this article?

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

ファイルの保存領域

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

上記の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/

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

http://inkpod.carabiner.jp/index.html

最後に

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした