😺

Git の基本コマンドまとめ

2021/03/30に公開

初期設定

インストールされた Git の確認

git version

ユーザ名の設定 (Github で登録したユーザ名)

git config --global user.name "hogehoge"

メールアドレスの設定 (Github で登録したメールアドレス)

git config --global user.email test@example.com

Git でコミットやタグのメッセージを編集するときにデフォルトで使用されるエディタを設定

Atomを使う場合

Atomを使う場合
git config --global core.editor "atom --wait" 

VisualStudioCodeを使う場合

VisualStudioCodeを使う場合
git config --global core.editor "code --wait"

設定内容の確認

git config --list

ローカルリポジトリに反映させるまで

まずは Git で管理していきたいディレクトリに移動します。
その後、そのディレクトリを丸ごとローカルリポジトリに追加するために git init と打ちます。

git init

これで最初の準備の一つであるローカルリポジトリが作成できました。

さて、このあとは書いたコード等のファイルをローカルリポジトリに追加していきます。

普段、コードを書いたりファイルを作成する場所のことをGitではワークツリーといいます。
このワークツリーの状況をローカルリポジトリに反映させる前に、
一度「このファイルは反映させる準備OK」と明らかにするためステージにファイルを追加していきます。

このときのコマンドが git add です。

git add ファイル名

作業中のフォルダ内のファイルをすべて追加したければ git add . と打ちます。

git add .

これでローカルリポジトリに反映させる準備が整いました。
その他に反映させたいファイルが出来上がったら、追加で更にファイルを git add でステージに追加します。
そしていよいよ準備が整ったら、git commit でローカルリポジトリに反映させることになります。
さらにオプションで -m "こめんと" という形でコメント付きのコミットを実行できます。
変更内容が自分からみても、他の人から見ても分かるようになるので必ずつけるようにしましょう。

git commit -m "コメントを入力"

これでローカルリポジトリへ変更を反映できました。

ちなみにワークツリー内の変更を一旦、コミット前に確認することもできます。

git status

変更差分をみたいとき

git diff コマンドを使います。

ワークツリーとステージの差分を確認

ワークツリーとステージの差分を確認
git diff
or
git diff ファイル名

ステージとリポジトリの差分を確認

ステージとリポジトリの差分を確認
git diff --staged

これまでの変更履歴をみたいとき

git log

一行ずつ要約して履歴を表示

一行ずつ要約して履歴を表示
git log --oneline

特定ファイルにおける変更差分を表示

特定ファイルにおける変更差分を表示
git log -p test.txt

ファイルの削除を記録

ファイルごと削除

ファイルごと削除
git rm test.txt

ディレクトリごと削除

ディレクトリごと削除
git rm -r testdir

ファイルは残すがリポジトリから削除

ファイルは残すがリポジトリから削除
git rm --chached test.txt

ちなみにこのとき削除したファイルを add はできないので、既にステージングが完了している状態になっています。

ファイルの移動を記録

git mv testOld.txt testNew.txt

Github 内の既存プロジェクトを作業するとき

あなたが開発チームに参入したときなど、既にGithubに上がっているコードから作業をする時があるかもしれません。
そんなときは、まずはリモートリポジトリ(今回はGithub上)にあるファイル達を一度ローカルリポジトリとワークツリーにコピーしてきてあげます。

git clone リポジトリ名

リポジトリ名は、Githubでコピーしたいリポジトリを開いたらClone用のURLをコピーできる場所から入手します。

上記は私のGithub内に作ったテスト用のリモートリポジトリですが、これをローカルリポジトリおよびワークツリーにコピーするときはこんな感じです。

git clone https://github.com/tmasuyama1114/testgit.git

リモートリポジトリ(Github)でコードを管理

リモートリポジトリ(Github)を新規追加

git remote add origin リポジトリURL で追加できます

git remote add origin https://github.com/tmasuyama1114/testgit.git

なお、cloneしたリポジトリで作業しているときは既にorigin(ショートカット)が存在してしまっているので以下のコマンドで一度削除してあげます。

git remote rm origin

ここでいうoriginは、登録するリモートリポジトリURLの短縮名というイメージです。

リモート

git push リモート名 ブランチ名 でプッシュします

git push origin master

ちなみに最初に以下のようにオプションをつけておくと、次回以降pushするときに「origin master」とつけなくて済みます。

git push -u origin master

Gitで管理させないファイルを登録

パスワードが書いてあるファイルだったり、ただのキャッシュファイルだったりするようなものはGitでバージョン管理する必要がありませんね。
そういったファイルは .gitignore に書きます。

以下は、ignoreFile.txt というファイルをバージョン管理したくないときの .gitignore ファイルです。

.gitignore

.gitignore
# 以下のファイルはGit管理対象外
ignoreFile.txt

変更を戻す時

ファイルへの変更を取り消す

git checkout --test.txt

ディレクトリ全体の変更を取り消す

git checkout --testdir

全変更を取り消す

git checkout --

ステージした変更を取り消す (git add したものを取り下げる)

ステージしたファイルを取り消す

git reset HEAD test.txt

ステージしたディレクトリを取り消す

git reset HEAD testdir

ステージした全変更を取り消す

git reset HEAD

コミットのやり直し

pushする前ならばコミットをやり直せる(修正できる)

直前のコミットのやり直し(今のステージの内容で)

git commit --amend

リモートリポジトリとのやり取り

リモートリポジトリの設定

リモートを表示

git remote

詳細情報

詳細情報
git remote -v

リモートリポジトリを複数登録

git remote add リモート名 リモートURL

例えば origin の他に other というリモートリポジトリを登録した場合は
以下のようなコマンドでpushなどの操作を行うことになります。

git push other https://xxxxxxxxxx

リモートから取得(フェッチ)

フェッチはリモートから情報をコピーした後、すぐにマージしない時に使うコマンドです。

git fetch origin(リモート名)

フェッチの場合、ワークツリー(master)には保存されずブランチとして保存されるので
内容を表示したいときは git branch -a でフェッチしたものを確認し、
git checkout remotes/origin/master でブランチを切り替えます。

フェッチした内容を origin/master ブランチに merge したいときは
先に git checkout master でmasterブランチに戻り、以下のコマンドを入力します。

git merge origin/master

リモートから取得(プル)

プルはリモートから情報をコピーした後、すぐにマージする時に使います。

git pull origin master

そのため、上記のコマンドと下記のコマンドは同じ意味を持ちます。

git fetch origin master
git merge origin/master

リモートの詳細情報を表示

git remote show origin

リモートを変更する(リネーム)

git remote rename 古いリモート名 新リモート名

リモートを削除する

git remote rm リモート名

ブランチの操作

ブランチを追加

git branch ブランチ名

ブランチの一覧を表示

git branch

すべてのブランチを表示

git branch -a

既存のブランチを切り替える

git checkout 既存ブランチ名

ブランチを新規作成して切り替える

git checkout -b 新ブランチ名

変更をマージ

git merge ブランチ名

ブランチ名の変更(作業中のブランチで入力)

作業中のブランチで以下を実行します。

git branch -m 新しいブランチ名

ブランチの削除

git branch -d ブランチ名

上記を実行したとき、対象のブランチがもし master にマージされていないブランチである場合には削除できません。
それでも強制的にブランチを削除したいときは、

git branch -D ブランチ名

コンフリクトの扱い

同じファイルで、同じ行に対して異なる変更を行うとコンフリクトが発生します。
その際にはコンフリクトを解消してあげる必要があります。

解消方法

コンフリクトしたファイルには、コンフリクトが発生した箇所がわかるようになっているので
最終的な(正しい)形にファイルを修正してあげればOKです。

コンフリクトが起きているファイルの確認方法

git status

で確認すると、該当のファイルが表示されます。
そしてワークツリー内のファイルを確認するとコンフリクトについての記載があるので、あるべき姿になるように修正の上
git add と git commit をしてあげればコンフリクトを解消できます。

コンフリクトの防止するための注意点

  • 複数人でファイルを同時に編集しないこと
  • pull を行う際は、pull をしようとしているブランチに checkout してから pull を行うこと
  • pull・merge をする前に commit or stash を行い、編集中のファイルを無くす

Discussion