Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@masayuki031

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

More than 1 year has passed since last update.

ファイルの保存領域

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

上記の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も理解が浅いため、またググって、投稿しようと思います。
おかしな点あれば、まさかりいただけると幸いです。

0
Help us understand the problem. What is going on with this article?
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
masayuki031
iPhoneアプリ作ったり・Alexaスキル作ったりしています。
fusic
個性をかき集めて、驚きの角度から世の中をアップデートしつづける。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?