0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#3. 意外と便利なGitコマンドたち

Last updated at Posted at 2024-10-20

はじめに

皆さんこんにちはnayaaaaです。
今回はGitのコマンドについていろいろと調べて試してみたので個人的に便利だなと思ったものをまとめてみました。

皆さんがGitで日常的に使用するコマンドはgit (add、commit、pull、push)あたりかなぁと思います。あと初回のセットアップ時にgit (config、init、clone)とか?
しかし、Gitのコマンドは意外にも多く実装されており、中には覚えておくと便利なものも複数あります。
特に、Gitをあまり触ったことがないという方は是非参考にしていただければと思います。

Gitコマンド

  • git log

git log コマンドは現在までのコミット情報をを表示してくれます。

$ git log
commit d34787267422c56976421bb6510948b5ccab188b (HEAD -> main, origin/main, origin/HEAD)
Author: ユーザー名 <メールアドレス>
Date:   Sat Oct 19 21:03:49 2024 +0900

    feat: git_practice02 in the test dir

commit dc5f21f8a7ca0a1935d2430e25d309a088e87575
Author: ユーザー名 <メールアドレス>
Date:   Sat Oct 19 21:02:06 2024 +0900

    feat: git_practice in the test dir

commit = コミットID この情報を使用することで情報の比較やコミット時の状態に戻すことができます。
Author = コミットを行ったユーザ名とメールアドレス
Date  = 日時
{任意のメッセージ}= コミット時のメッセージ上記では「Date」の下に出力されているメッセージ

  • --onelineを付与することで簡易的に表示することも可能です。
$ git log --oneline
d347872 feat: git_practice02 in the test dir
dc5f21f feat: git_practice in the test dir

書式:コミットID メッセージ
先ほどに比べコミットIDが少ないのですがrevertコマンドなどを使用する際、こちらのコミットIDを使用しても問題ないです。

  • git revert {コミットID}

git logにて確認したコミットIDを指定することで、指定したコミットIDの変更を打ち消すことができる。
※似た処理としてgit resetがあるが、こちらはlogとして残らないのであまり推奨されない
 →間違えてコミットしてしまった際はこちらのgit revertを使いましょう。

👇現状のtest配下

$ ls test/
git_practice  git_practice02
$ cat test/git_practice02
test02

feat: git_practice in the test dirの状態に戻したいと思います。

$ git revert d34787267422c56976421bb6510948b5ccab188b
[main cd4a2f5] Revert "feat: git_practice02 in the test dir"
 1 file changed, 1 deletion(-)
 delete mode 100644 test/git_practice02
$ ls test
git_practice

何とか消えたっぽい。

$ git log
commit cd4a2f5e61ab14ce399f81e2bea912cf0910399e (HEAD -> main)
Author: nayataiyo <ecsim39@gmail.com>
Date:   Sat Oct 19 21:09:28 2024 +0900

    Revert "feat: git_practice02 in the test dir"

    This reverts commit d34787267422c56976421bb6510948b5ccab188b.

しかも、git revertコマンドを使用するとローカルリポジトリにコミットされた状態で反映してくれるんですね。

  • git restore --source={コミットID} --staged --worktree {ファイルパス}

git restoreにオプションを指定して使用すると、特定のファイルのみを指定したコミットIDの状態時に戻すことが可能です。
まず、前述したgit revert前の状態に戻してからgit_practiceの内容を変更してみます。

せっかくなので、git log --onelineで表示されるコミットIDを使用してgit revertしてみます。

$ git log --oneline
cd4a2f5 (origin/main, origin/HEAD) Revert "feat: git_practice02 in the test dir"
d347872 feat: git_practice02 in the test dir
dc5f21f feat: git_practice in the test dir

簡易的にログを表示

$ git revert cd4a2f5
[main 8753a91] Reapply "feat: git_practice02 in the test dir"
 1 file changed, 1 insertion(+)
 create mode 100644 test/git_practice02

git revertで省略されたコミットIDを指定

$ git log --oneline
8753a91 (HEAD -> main) Reapply "feat: git_practice02 in the test dir"
cd4a2f5 (origin/main, origin/HEAD) Revert "feat: git_practice02 in the test dir"
d347872 feat: git_practice02 in the test dir
dc5f21f feat: git_practice in the test dir
$ ls test
git_practice  git_practice02

無事revertできてそうですね。

じゃあ記載内容を変更していきます。

$ cat test/git_practice
test
$ vi test/git_practice
change_test

以下のコマンドを使用。

$ git restore --source=dc5f21f --staged --worktree test/git_practice

revertのようにコミット全体を取り消しているわけではないのでgit_practice02が存在している。

$ ls test
git_practice  git_practice02

git restoreコマンド実行後ファイルの出力を確認

$ cat test/git_practice
test

testのみの状態に戻っていますね。

※あくまでもコミットID状態に戻すだけなのでコミットはされていない。

  • restoreとrevertの区別

    • restore = コミットIDの状態に戻す
    • revert =コミットIDの変更を取り消して再度コミット
      ※コミット時にログに記録されるのでgit revertgit logに記録される。
  • git status

作業ディレクトリとステージングエリアの状態を確認するコマンドで、何がステージングされていて、何がステージングされていないか、さらに新規ファイルが追跡されているかどうかを確認できます。

$ git status
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   test/git_practice

上記の例だと、mainブランチで作業されており、リモートリポジトリよりローカルリポジトリのほうが2件コミットが進んでいることを表しています。

そして現在ステージング状態であるパスを表示してくれています。

  • git diff

オプション無しだと最新のコミットした内容とワーキングツリー(作業ディレクトリ)との変更差分を確認することが可能です。

$ vi git_practice
test_diff
$ git diff
warning: in the working copy of 'test/git_practice', LF will be replaced by CRLF the next time Git touches it
diff --git a/test/git_practice b/test/git_practice
index 9daeafb..c151392 100644
--- a/test/git_practice
+++ b/test/git_practice
@@ -1 +1 @@
-test
+test_diff

特定の2つのコミット状態(コミットID)を比較して、変更された内容を確認する

$ git log --oneline
f92de8b (HEAD -> main) change:git_practice
8753a91 Reapply "feat: git_practice02 in the test dir"
cd4a2f5 Revert "feat: git_practice02 in the test dir"
d347872 feat: git_practice02 in the test dir
dc5f21f feat: git_practice in the test dir
$ git diff dc5f21f f92de8b

$ git diff 8753a91 f92de8b
diff --git a/test/git_practice b/test/git_practice
index 9daeafb..c151392 100644
--- a/test/git_practice
+++ b/test/git_practice
@@ -1 +1 @@
-test
+test_diff

特定のファイルと過去のコミット状態の差分を確認することも可能です。

$ git diff 8753a91 -- git_practice
diff --git a/test/git_practice b/test/git_practice
index 9daeafb..c151392 100644
--- a/test/git_practice
+++ b/test/git_practice
@@ -1 +1 @@
-test
+test_diff
  • git show {コミットID}

git showコマンドは、Gitで特定のコミットに関する詳細な情報を表示するためのコマンドです
コミットID無しは最新のコミットに関する詳細を表示

$ git show
commit f92de8b53af0453a6bb5dc541550bff44f97cedb (HEAD -> main)
Author: ユーザー名 <メールアドレス>
Date:   Sun Oct 20 10:05:09 2024 +0900

    change:git_practice

diff --git a/test/git_practice b/test/git_practice
index 9daeafb..c151392 100644
--- a/test/git_practice
+++ b/test/git_practice
@@ -1 +1 @@
-test
+test_diff

まとめ

Gitのコマンドは日常的に使用するものが限られているため、
こうして改めて確認してみると覚えておくと便利だなと思ったものが多かったです。
他にも、これは覚えておくと便利というコマンドなどがあれば教えていただければと思います!

以上となります~ありがとうございました~

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?