Gitコマンド入門::add,reset,rm,status,log「第三十一回」

4 min read読了の目安(約4100字

みなさんこんにちは! さあ~今回も、gitの基礎学習を始めますよ! ここまで、いろいろ解説をしてきましたが、文章構成、内容なども含めて、あまり上手ではありませんね。反省しています。m(_)m とはいえ、書かなければ前に進まないのも現実なので、このまま、思うがままに進めて行きま~す。(^^;;

前回の記事は、こちら!

https://zenn.dev/shiozumi/articles/fa1a6f25b09964

git本家本元の情報はこちらから!

https://git-scm.com/book/ja/v2

今日の学習専用レポジトリーはこちら!

https://github.com/shiozumi-makoto/202103.git

git clone で取得できます!

$ mkdir temp <!-- 適当なフォルダーを作成してください!
$ cd temp <!-- そこに移動して、git clone! 

$ git clone https://github.com/shiozumi-makoto/202103.git -b v.0032
// v.0032は、タグ名です!

Cloning into '202103'...
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 11 (delta 1), reused 11 (delta 1), pack-reused 0
Unpacking objects: 100% (11/11), done.
Note: switching to 'ceff847fe43d049e447b5b57e2137fe57e38d2de'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

// いろいろメッセージが流れますけど、
// git switch -c <new-branch-name> を実行すれば、解決します!
//

$ ls
202103  <!-- 新しくフォルダーが作成されていますので!

$ cd 202103
$ git switch -c tag0032 // <!-- 任意のブランチ名を設定可能!

$ git branch -a
* tag0032
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  
$ git log --oneline
ceff847 (HEAD -> tag0032, tag: v.0032, origin/main, origin/HEAD) 3rd add b.txt
ce2321e 2nd add a.txt
53d39e0 1st

git clone コマンドの解説は、ここでは、割愛させて頂きますね。

git commit の修正!

それでは、git commit の修正から始めましょう!
まずは、c.txt 4thのコミットの追加から!

$ git log --oneline --reverse
53d39e0 1st
ce2321e 2nd add a.txt
ceff847 (HEAD -> main, tag: v.0032, origin/main, origin/HEAD) 3rd add b.txt
// 現状のGitリポジトリ

$ echo "c.txt" > c.txt
$ ls
README.md  a.txt  b.txt  c.txt
$ cat c.txt
c.txt
// ファイルの追加と、中身の確認をしてください!

$ git add c.txt

$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   c.txt

$ git commit -m "4th add c.txt"
[main 814f737] 4th add c.txt
 1 file changed, 1 insertion(+)
 create mode 100644 c.txt

$ git log --oneline --reverse
53d39e0 1st
ce2321e 2nd add a.txt
ceff847 (tag: v.0032, origin/main, origin/HEAD) 3rd add b.txt
814f737 (HEAD -> main) 4th add c.txt
// これで、c.txt が追加されました!

c.txt ファイルを変更して、直前のコミットを修正!

今、先ほど追加した、直前のコミットを修正してみましょう。要するに、上書きですね。ここでは、HEADのハッシュ値は、814f737 になります。git commit --amend で修正できます。

$ echo "c.txt new edit" > c.txt
// c.txt を、編集します!

$ git status -s
_M c.txt  // <!-- add していないので、Mの文字が赤くなっています!

$ git add c.txt
$ git status -s
M_ c.txt  // <!-- add したので、Mの文字が緑色に変化しました!

$ git commit --amend // <!-- これで、上書き修正可能です!

[main 9b19532] 4th add c.txt edit // <!-- コメントは、4th add c.txt edit
 Date: Wed Mar 3 14:19:24 2021 +0900
 1 file changed, 1 insertion(+)
 create mode 100644 c.txt

git commit -a --amend -C HEAD と入力すると、add と commit を同時に行います。[1]

$ git commit -a --amend -C HEAD
[main c3a039d] 4th add c.txt edit
 Date: Wed Mar 3 14:19:24 2021 +0900
 1 file changed, 1 insertion(+)
 create mode 100644 c.txt

-C HEAD を、-C HEAD~ とか、-C c90231b ハッシュ値の指定も可能ですよ!(笑)[2]

おそらく、git commit -a --amend -C HEAD コマンドは、割りと利用する機会も思います。ファイルを修正する度に、コミットが増えていくのもなんですしね。まあ~その前に、そんなにコミットを頻繁にすることもないと思いますけど。兎にも角にも、あ~と、もうちょっとだけ、修正したい! っていう時には、このコマンドは便利だと思いますよ!

今回のまとめ

コミットした直後に、少しだけファイルを修正した場合など、直前のコミットに上書きしたい場合は、--amend が便利ですね。尚、もう一度、最初からやり直したい場合は、git reset が有効です。つまり元のファイル全てを復元してから、再度、修正する方法です。次回は、こちらを試して行きますよ!

しっかり理解するまで、何度か繰り返し試しましょう! 尚、最初からやり直したい場合は、
git reset --hard v.0032 で初期化してくださいね!

それでは、今回はここまで、お疲れ様でした!

https://zenn.dev/shiozumi/articles/aafde127262c8a
https://twitter.com/esmile2013
脚注
  1. -a が、add コマンドです。-C HEAD は、コメントの変更を省略できます。 ↩︎

  2. 過去のコミットのコメント文を流用することも、あまりないとは思いますけどね。 ↩︎