Gitコマンド入門::add,reset,rm,status,log「第三十四回」
みなさんこんにちは! 今回も、git reset の続きを学習していきます! ここ数回は、reset のオプションを、--sotf --mixed --hard などに変更しながら試してきましたので、今回は、HEADの部分を変えてみます。HEAD~ を指定して、ひとつ前に戻してからの、commit は、前回学習しましたから、今回は、HEAD! ● の部分です!
git reset | --sotf | --mixed | --hard | 補足 |
---|---|---|---|---|
HEAD~ | 前回学習 | 前回学習 | 前回学習 | 第三十二回、第三十三回 |
HEAD | ○ | ● | ○ | <-- 今回は●の箇所 |
任意のハシュ値 | - | - | - | - |
前回の記事は、こちら!
git本家本元の情報はこちらから!
今日の学習専用レポジトリーはこちら!
git clone で取得できます!
$ mkdir temp <!-- 適当なフォルダーを作成してください!
$ cd temp <!-- そこに移動して、git clone!
git clone https://github.com/shiozumi-makoto/202103.git -b tag0032 v.0033
$ ls -a v.0033/
. .. .git README.md a.txt b.txt
// .gitリポジトリと、ファイルが3つあればOKです!
ブランチ名、tag0032 は省略可能です。
その場合は、あとからブランチ名を追加してください。
git switch -c <任意のブランチ名>
git log --graph を実行!
$ git log --graph
* commit 87569630965a792350b1b3fe3e8388db5f942da8 (HEAD -> tag0032, tag: v.0033, origin/tag0032)
|
| 3rd add b.txt git reset
|
* commit ce2321ec396ba5020fefbf9ed92a6db9c9ea4f1a
|
| 2nd add a.txt
|
* commit 53d39e0fc077f26cc71854e7af89c67c7fe5050b
1st
--graph オプションを付けると、このような視覚化もできるようです。
Author: Date: の項目は、省略してあります!
git reset --mixed HEAD
ここでは、--mixed と HEADを、付け加えて実行していますが、--mixed HEAD は省略可能。通常は、git reset
ですね。(笑)
ワーキングディレクトリ | ステージングエリア | Gitリポジトリ |
---|---|---|
何もしない | HEADからコピー | HEADもそのままの位置 |
- ワーキングディレクトリは、何もかわりません。[1]
- ステージングエリアは、指定したHEADからのファイルで上書きされます。
- HEADを指定しているので、そのまま動かずに、同じ位置ですね。
$ echo "c.txt" >c.txt // <!-- c.txtを追加してみましょう!
$ git status
On branch tag0032
Your branch is up to date with 'origin/tag0032'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
c.txt
nothing added to commit but untracked files present (use "git add" to track)
$ git add c.txt // <!-- addして!
$ git status -s
A c.txt // <!-- Aが緑色ですね。
c.txt を追加 git add c.txt してからの git reset --mixed HEADをですね!
$ git reset --mixed HEAD // <!-- --mixd HEAD は省略可能です!
$ git status -s
?? c.txt // <!-- Aから、??に変わり、赤い文字なりました!
c.txt が元の、Untracked files: となりましたね。
更に、b.txt も追加で編集してみます!
$ cat b.txt
b.txt + git reset
$ echo "b.txt + git reset --mixed HEAD " > b.txt
$ cat b.txt
b.txt + git reset --mixed HEAD
// こんな内容に変更して!
$ git add . // <!-- ピリオドで、b.txt c.txt を同時にadd!
$ git status
On branch tag0032
Your branch is up to date with 'origin/tag0032'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: b.txt
new file: c.txt
$ git status -s
M b.txt // <!-- Mは、緑色の文字
A c.txt // <!-- Aは、緑色の文字
git reset b.txt を実行!
$ git reset b.txt
Unstaged changes after reset:
M b.txt
$ git status -s
M b.txt // <!-- Mは、赤色になりました!
A c.txt // <!-- Aは、緑色の文字
$ git reset c.txt
$ git status -s
M b.txt // <!-- Mは、赤色
?? c.txt // <!-- ??で赤色に変化しました!
これで、git reset
が、git add .
コマンドの取り消しと同じ動作になることが分かりましたね。git restore --staged b.txt
,git restore --staged c.txt
でも同じことができますので、是非、一度は、お試しください。[2]
git restore --staged b.txt を実行!
$ git add . // <!-- もう一度、add してからの!
$ git restore --staged b.txt
// 尚、こちらも、HEADを省略しています。
// フルコマンドは、git restore --source=HEAD --staged b.txt
$ git status -s
M b.txt // <!-- Mは、赤色
A c.txt // <!-- Aは、緑色の文字
さあ、いかがでしょうか? git add に対する反対の取り消し操作、git reset は、本来ならばもっと前に学習する方が良かったのですが、かなり後回しになってしまって、大変、申し訳ありませんでした。m(_)m まあ~ここまで来るのに紆余曲折でしたけど、おかげさまで、私もちょっとは、gitについて分かった気がしますよ! それでも、3%ぐらいかな?(爆笑)
それでは、今回はここまで、お疲れ様でした!
Discussion