副業におすすめなサイトを見る→

Gitコマンド頻出!役立つ操作やトラブル集も合わせて解説

アプリリリースのお知らせ

予定を探すアプリyoteipickerをリリースしました。

アプリの利用用途:暇だから何か予定入れたいけど今週の土日は何しようかな〜?ってときに使えるアプリです。

Gitのコマンド操作よくわからなくて、なんだか怖い。Gitでよく出るコマンドやトラブった時に役立つ情報を知りたいなぁ….

Gitの操作はエンジニアになったばかりだと、なかなか覚えられなくて苦労しますよね….

コマンド操作が苦手で、コマンドではなくてSorceTreeやGithub Desktopなどを活用して避けている方もいるでしょう。

ただ、いざそれらが使えない現場に出くわした時に、Gitコマンドが使えないと恥ずかしいですよね。

今回は、頻出のGitコマンド、トラブった時の対処法などを解説します。

>>ココナラと似てるおすすめの副業サイトを確認する

>>リモートワークもあるおすすめの転職サイトを確認する

休日で空いた時間の暇つぶしを探せるアプリを公開しています。

Contents

頻出のGitコマンド

git clone

git cloneでリポジトリをコピーしましょう。

% git clone {リポジトリのURL}

例①http
% git clone https://github.com/githubユーザー名/test_app.git

例②ssh
% git clone git@github.com:githubユーザー名/test_app.git

名称を変更してgit cloneすることもできます。

% git clone https://github.com/testuser/test_app.git 変更したいアプリ名
例)
% git clone https://github.com/testuser/test_app.git blogs

test_appではなく、blogsの名前でgit cloneできます。

git branch系

git branch

まずは、自分が今いるブランチをgit branchで確認しましょう。

% git branch

// 現在いるブランチに*がつく。
* feature_test
  main

git branch -a

ローカルブランチとリモートブランチ全て表示します。

% git branch -a
  feature_test1
  feature_test2
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main

git branch ブランチ名

ブランチを新規作成するけど、チェックアウトしません。

% git branch feature_test3
(git branchで今いるブランチを確認)
% git branch
  feature_test1
  feature_test2
  feature_test3
* main

git branch -d ブランチ名

ブランチを削除します。※git branch -D ブランチ名で強制削除

% git branch -d feature_test3
Deleted branch feature_test3 (was 12fe7df).
% git branch
  feature_test1
  feature_test2
* main

git branch -m 変更前のブランチ名 変更後のブランチ名

ブランチ名を変更します。

% git branch
  feature_test1
  feature_test2
* main
git branch -m feature_test2 feature_test4
% git branch
  feature_test1
  feature_test4
* main

git checkout系

git checkout ブランチ名

ブランチ名にチェックアウトします。以下では、mainブランチからfeature_test1ブランチに切り替わっていることが確認できますね。

% git checkout feature_test1
Switched to branch 'feature_test1'
% git branch
* feature_test1
  feature_test4
  main

git checkout -b ブランチ名

ブランチ名を新規作成し、かつブランチにチェックアウトします。
以下では、feature_test1ブランチにいる状況から、コマンドを実行してブランチを新規作成、さらにチェックアウトできています。

% git branch
* feature_test1
  feature_test4
  main
% git checkout -b feature_test2
Switched to a new branch 'feature_test2'
% git branch
  feature_test1
* feature_test2
  feature_test4
  main

git status系

git status

変更されたファイルを出力します。
※git commitされる前のファイルが対象

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

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   src/App.vue

no changes added to commit (use "git add" and/or "git commit -a")

git status -s

git statusをコンパクトにして出力します。
※変更されたファイル名のみ出力してくれます。

% git status -s
 M src/App.vue

git add系

git add .

変更したファイルを全てステージに追加します。

% git status -s
?? public/sample.html
?? public/test.html
% git add .
% git status -s
A  public/sample.html
A  public/test.html

git add ファイル名

特定のファイル名をステージに追加します。

% git status -s
?? public/sample.html
?? public/test.html
% git add public/sample.html                 
% git status -s
A  public/sample.html
?? public/test.html

複数の特定ファイルを追加したい場合は、以下のようにします。
git add ファイル名 ファイル名 ファイル名....

git commit系

git commit

エディタを開いて、コミットメッセージを入力しコミットします。

git commitを実行すると、エディタが開くので、コミットメッセージを入力するために、インサートモードにします。(iを押す。)

コミットメッセージを入力します。(ここではファイルの追加としました。)

escキーを押し、:wqで保存すればコミット実行です。

ファイルの追加
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Committer: kamoto <kamototakahiro@kamototakahironoMacBook-Air.local>
#
# On branch main
# Your branch is up to date with 'origin/main'.
#
# Changes to be committed:
#       new file:   public/sample.html
#       new file:   public/test.html
#
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
-- INSERT --

git commit -m “コミットメッセージ”

commitとコミットメッセージを同時に行います。上記のようにエディタを開く必要もないです。

% git commit -m "ファイルの追加"

git push系

git push origin ローカルブランチ

push系のコマンドで、Githubにあるリモートブランチにソースをアップできます。

前提として、ローカルブランチを作成→コミットまで行いましょう。

% git branch
* main
% git checkout -b feature_push
Switched to a new branch 'feature_push'
% git branch
* feature_push
  main
(ファイルを適当に変更します。今回はindex.htmlを変更してみました。)
% git status -s
 M public/index.html
% git add .
% git commit -m "プッシュテスト"
[feature_push 3ae42b5] プッシュテスト

    git config --global user.name "Your Name"
    git config --global user.email you@example.com

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

 1 file changed, 1 insertion(+), 1 deletion(-)
(コミットまで行いました。)

これまでの復習でブランチ作成→コミットまで行いましたので、プッシュしてリモートブランチにアップしましょう。

% git branch      
* feature_push
  main
% git push origin feature_push
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 4 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 406 bytes | 135.00 KiB/s, done.
Total 4 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
remote: 
remote: Create a pull request for 'feature_push' on GitHub by visiting:
remote:      https://github.com/〇〇/pull/new/feature_push
remote: 
To 
 * [new branch]      feature_push -> feature_push

プッシュに成功しました。

Githubを確認すると、新たにfeature_pushリモートブランチが作成されてソースが反映されています。

mainブランチにプッシュなら、git push origin mainになります。

git push -d origin リモートブランチ名

リモートブランチを削除するコマンドです。

% git push -d origin feature_push
To ××.git
 - [deleted]         feature_push

git pull系

git pull origin main

mainブランチの内容を取り込む

(mainブランチにチェックアウトする)
% git branch
* main
% git pull origin main
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (1/1), 657 bytes | 328.00 KiB/s, done.
From 〇〇
 * branch            main       -> FETCH_HEAD
   d11c4f0..7dad3fe  main       -> origin/main
Updating d11c4f0..7dad3fe
Fast-forward
 public/index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

プルできて、mainブランチを最新にできました。

git stash系

git stash list

スタッシュしたリストを表示します。

% git stash list
stash@{0}: On main: スタッシュテスト

git stash push -m メッセージ

メッセージ付きでスタッシュができます。

% git status -s
?? test.html
% git add .
% git stash push -m "スタッシュテスト"
Saved working directory and index state On main: スタッシュテスト
% git stash list
stash@{0}: On main: スタッシュテスト

スタッシュテストという名前でスタッシュができました。

git stash apply stash名(stash@{0}となっている方)

スタッシュを適用し、スタッシュリストも残しておく

% git stash push -m "スタッシュリスト"
Saved working directory and index state On main: スタッシュリスト
% git stash list
stash@{0}: On main: スタッシュリスト
% git stash apply stash@{0}
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:   test.html

% git stash list
stash@{0}: On main: スタッシュリスト←スタッシュリストも残っている。

git log系

git log

過去のコミット履歴を表示します。

% git log
commit 7dad3fef879d30f3307a9c1a88b8e8e6c295483c (HEAD -> main, origin/main)
Merge: d11c4f0 3ae42b5
Author:  <64408070+@users.noreply.github.com>
Date:   Sat Feb 5 13:18:30 2022 +0900

    Merge pull request #1 from /feature_push
    
    プッシュテスト

git log -p ファイルのパス

特定ファイルのコミットの履歴が見れます。誰がいつそのファイルを変更したのか、コミット番号もわかります。

以下では、public/index.htmlにあるファイルの変更履歴を確認しています。
% git log -p public/index.html 
commit 3ae42b505b66cd964d28607c83eb333c2fc831bd (feature_push)
Author:  <.local>
Date:   Sat Feb 5 13:06:22 2022 +0900

    プッシュテスト

diff --git a/public/index.html b/public/index.html
index 3e5a139..72ee142 100644
--- a/public/index.html
:

もっとコンパクトに表示させるなら、以下も有効です。

git log –word-diff -p ファイルのパス名

実務でGitコマンドを使う流れ

実務でGitを操作する流れは、
①git cloneする
②mainブランチを最新にする
③mainブランチから開発ブランチを切る
④開発ブランチで作業する
⑤変更したファイルをステージングに上げる
⑥コミットする
⑦リモートブランチにプッシュする
⑧プルリクする
⑨プルリクが承認されてマージされる
⑩mainブランチにチェックアウト
→②から同様の作業

プルリク以外はすでに開設済みなので、ぜひ活用してみてくださいね!

Git操作で役立つ操作&トラブル集

ここからは、実務でよくあるGit操作で困ることを解決していきます。

開発ブランチに最新のmainブランチを取り込む

mainブランチからfeature_topブランチを作成して、そっちで作業してたけど、開発している間にmainブランチはどんどん新しくなります。自分がmainと同じファイルを編集していた場合、mainにマージした時に、せっかくmainのソースが正しいのに、それを上書きしてしまったりする可能性があるので、プルリクする前にmainブランチの内容を取り込むようにしましょう。

※以下の作業を行う前に、開発ブランチ(feature_top)でコミットするか、
まだコミットしたくない場合はスタッシュして退避しておきましょう。
①開発ブランチでコミットかスタッシュして、変更したソースを保存しておく

②mainブランチにチェックアウト
% git checkout main

③mainブランチを最新にする
% git pull origin main

④開発ブランチにチェックアウト
% git checkout feature_top

⑤開発ブランチにmainをマージ
% git merge main

⑥リモートブランチにプッシュする
% git push origin feature_top

直前のコミットを取り消す

直前のコミット間違えた!って時に、コミット取り消せます。

% git reset --soft HEAD^

開発ブランチでやるはずがmainブランチで作業していた

本来、feature_topなどブランチを作成して作業するはずが、気づいたらmainブランチで作業していた…
って時は、焦らずに、スタッシュする→ブランチを作成する→新しいブランチにスタッシュを反映する→作業するでOKです。

% git branch
  feature_push
* main

% git status -s
AM test.html

(mainブランチで作業していたのでmainブランチでスタッシュ)
% git stash push -m "mainで作業しちゃったorz"        
Saved working directory and index state On main: mainで作業しちゃったorz

(ブランチを新規作成)
% git checkout -b feature_top
Switched to a new branch 'feature_top'
% git branch
  feature_push
* feature_top
  main

(スタッシュリストを表示)
% git stash list
stash@{0}: On main: mainで作業しちゃったorz
stash@{1}: On main: スタッシュリスト

(スタッシュを適用して、そのスタッシュは削除)
% git stash pop stash@{0}
On branch feature_top
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   test.html

Dropped stash@{0} (14a6fb19b3ec884b631fd18ca9ea35fd10c7d4be)

新しく作ったブランチで、反映された!

リモートブランチに切り替えて作業する

A君!Cさんのサポートのために、Cさんのリモートブランチにチェックアウトして作業してくれないかな?
他の開発メンバーの機能を手伝う場面の時に使えます。

例えば、Cさんがfeature_postsというリモートブランチ名で、機能作成していたとすると、以下のようにチェックアウトできて、作業できます。

% git checkout -b ブランチ名 origin/リモートブランチ名

% git checkout -b feature_posts origin/feature_posts

頻出のGitコマンドまとめ

実際に実務でよく使うGitコマンド中心に紹介しました。

Gitの操作は慣れないうとは戸惑いがちですが、コマンド覚えておくとかなり開発に便利です。

もちろん、Gitはコマンドからではなくソースツリーとかあるので直感的にも作業はできますが、コマンドでできる範囲は広いので、ぜひとも今回紹介した内容を活用してください。

>>ココナラと似てるおすすめの副業サイトを確認する

>>リモートワークもあるおすすめの転職サイトを確認する

休日で空いた時間の暇つぶしを探せるアプリを公開しています。

スキルを売り買いするならココナラ

コメント

コメントする

CAPTCHA


Contents
閉じる