はじめに
皆さんこんにちはnayaaaaです。
今回はGitのコマンドについていろいろと調べて試してみたので個人的に便利だなと思ったものをまとめてみました。
皆さんがGitで日常的に使用するコマンドはgit (add、commit、pull、push)あたりかなぁと思います。あと初回のセットアップ時にgit (config、init、clone)とか?
しかし、Gitのコマンドは意外にも多く実装されており、中には覚えておくと便利なものも複数あります。
特に、Gitをあまり触ったことがないという方は是非参考にしていただければと思います。
Gitコマンド
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 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
にオプションを指定して使用すると、特定のファイルのみを指定したコミット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 revert
はgit 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件コミットが進んでいることを表しています。
そして現在ステージング状態であるパスを表示してくれています。
オプション無しだと最新のコミットした内容とワーキングツリー(作業ディレクトリ)との変更差分を確認することが可能です。
$ 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コマンドは、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のコマンドは日常的に使用するものが限られているため、
こうして改めて確認してみると覚えておくと便利だなと思ったものが多かったです。
他にも、これは覚えておくと便利というコマンドなどがあれば教えていただければと思います!
以上となります~ありがとうございました~