🚀

Gitでやりたいこと、ここで見つかる

2020/09/24に公開

はじめに

「この記事を見ればGitで困ったことが(だいたい)全て解決する!」 っていう記事をまとめます。

ネット上にある記事は 「git rebaseの使い方」 といった感じでコマンド名は知っておかないと辿り着けないものが多いですが、「Gitで○○したい!」とか「Gitで△△してしまった...」って時にコマンド名からじゃなく問題から逆引きできる記事があればいいなと思ったことがあったからです。

同じことを感じていた方がいることを祈って書きます。(ぜひLGTMをお願いします☆★)

2020/9/21:追記
いただいたコメントを元に修正、追記しました。
コメントいただいた方々、ありがとうございますm(__)m

この記事の使い方

ボリュームがそこそこ多いので、右に表示されている目次から探して該当の箇所に飛んでいただければと思います。

※この記事では各Gitコマンドの詳細の使い方(特にオプション)は割愛しているので、以下の感じで活用していただければと思います。

1. Gitでやりたいこと、困っていることを目次から探す
2. どんなコマンドを使えば良いのかがわかる(←これがこの記事の役割)
3. 貼っている参考記事で詳細を見る or 自分でググる

注意点

※この記事では僕が使ったことのあるGitコマンドだけをまとめてます。

ローカルのソースファイルをGitHubにプッシュするまでの流れを知りたい(超基本)

Gitを使う上でこの一連の流れは絶対に抑えておきたいやつ

//Gitでの管理を始める(=ローカルリポジトリ作成)
$ git init

//ローカルリポジトリの設定を行う(GitHubを登録)
$ git config user.name GitHubのユーザーネーム
$ git config user.email GitHubのメールアドレス

//変更分をステージングにあげる
$ git add .

//ローカルリポジトリにあげる
$ git commit -m "コミットメッセージ"

//ローカルリポジトリにmainブランチを新規作成
git branch -M main

//リモートリポジトリ(GitHub)を登録
$ git remote add origin リモートリポジトリのURL

//リモートリポジトリにプッシュする
$ git push origin main

git branch -M maingit branch -m mainでもOK。

【Git】新人エンジニア、git pushまでの道

Gitでの管理をやめたい

  • デイレクトりごと管理をやめる
$ rm -rf .git/

※これだけGitコマンドではないですが参考までに。

  • ファイル単位で管理をやめる
$ git rm ファイル名

git 管理をやめる

ローカルリポジトリの設定内容(ユーザー名、メールアドレス)を変更したい

  • 全てのローカルリポジトリに設定を反映する
$ git config --global user.name ユーザー名
$ git config --global user.email メールアドレス

--globalをつけるのがポイント

  • 個別のローカルリポジトリに設定を反映する
$ git config user.name ユーザー名
$ git config user.email メールアドレス

gitconfig の基本を理解する

ローカルリポジトリの設定内容を確認したい

$ git config --list

gitconfig の基本を理解する

コミット履歴を確認したい

$ git log
  • コミット履歴を1コミット1行で見たい
git log --oneline

コミットid(乱数)、コミットの種類、コミットメッセージが1行で表示される。

git logを使ってコミット履歴を閲覧する方法【初心者向け】
git log全部入り

コミット履歴だけでなくHEADやブランチの動きなど細かいところまで確認したい

$ git reflog

これは***"Gitでやっちまった時"***に使いますねw
(僕は何度かお世話になりました)

Git Advent Calendar 201229日目
いざという時のためのgit reflog

ローカルリポジトリのステータスを確認(変更ファイル、追加ファイルがあるかとか)

$ git status

git status -s でちょっと幸せになれる

リモートリポジトリの状態をローカルリポジトリに反映したい(最新の状態にしたい)

$ git pull origin リモートのブランチ名

$ git pull origin mainは以下の2つのコマンドの合体↓

$ git fetch origin main
$ git merge origin main 

まあ、git pullを使うケースの方が圧倒的に多いかと。

サル先生のGit入門
git fetchの理解からgit mergeとpullの役割

間違えて実行したpullを取り消したい(merge失敗(コンフリクト)時)

$ git merge --abort

実務でdevelopブランチ(開発用)にmainブランチをpullしてしまって焦ったけどこれで解決した...

新しくブランチを作成したい

$ git branch ブランチ名 

git branchコマンドのいくつかの昨日はgit switchgit restoreで代替できるようになりましたのでこちら参考までに。(僕は使ったことありません)
【Git】あなたが知らない新コマンドswitch/restoreの世界にご招待

既存のブランチの名前を変えたい

$ git branch -m 変えたいブランチ名 変更後のブランチ名 

ローカルに存在するブランチを一覧で見たい

$ git branch 

ローカルブランチを削除したい

$ git branch -D ブランチ名

ブランチ名は$ git branchで見れる。

Gitでローカルブランチを削除する

自分が作業しているブランチを移動したい

$ git checkout 移動先のブランチ名

ブランチを新しく作る&そのブランチに移動したい

$ git checkout -b ブランチ名 

このコマンドでは現在いるブランチの内容を元に新しいブランチが作られますので、ご注意ください。

リモートリポジトリ(GitHub)のソースをローカルに複製したい

$ git clone リモートリポジトリのURL

ローカルで変更したファイルがあるけどブランチを変えたい(変更分を退避させたい)

  • 基本の使い方
$ git stash
  • メッセージをつけてgit stashする
$ git stash push -m "任意のメッセージ"

git stash saveは非推奨になっているのでgit stash push -mを使用しましょう。

色々な git stash

新規追加したファイルもgit stashしたい

$ git stash -u

git stashしたファイルの履歴を確認したい

git stash list

git stashしたファイルを元に戻したい

$ git stash apply 

上記のようにオプションなしだと直前のgit stashが元に戻ります。

色々な git stash

コミット履歴を綺麗にしたい

$ git rebase ブランチ名 

git rebaseを初めて使った際のまとめ

複数のコミットをまとめたい

$ git rebase -i

注意点ですが、まとめる(直前のコミットに統合)ことができるのはpush済みのコミットです。

rebase -i でコミットをまとめる

直前のコミットを取り消したい

  • コミット履歴は残してコミットの内容だけ取り消したい
$ git revert
  • コミット自体を取り消してワークツリーの変更も取り消したい
$ git reset --hard HEAD^
  • コミットだけ取り消したい
$ git reset --soft HEAD^ 

[Git]コミットの取り消し、打ち消し、上書き

直前より前のコミットを取り消したい

  • n個前のコミットを取り消してワークツリーの変更も取り消したい
$ git reset --hard HEAD~{n}
  • n個前のコミットだけ取り消したい
$ git reset --soft HEAD~{n}

ファイルの差分を確認したい

$ git diff

忘れやすい人のための git diff チートシート

直前のコミット(push済み)のコミットメッセージを修正して再度プッシュしたい

$ git commit --amend -m "新しいコミットメッセージ"
$ git push -f origin 先ほどpushしたリモートブランチ

git commit --amend -m "新しいコミットメッセージ"を実行した後にコミットメッセージが本当に変わっているかgit logで確認した方が良いです。

他のブランチでした特定のコミットを現在のブランチに取り込みたい

$ git cherry-pick コミットID

直前のコミットメッセージを変更したい

$ git commit --amend -m "新しいコミットメッセージ"

一応git logなりgit log --onelineなりでコミットメッセージが変更されているかは要確認。

Discussion