技術の犬小屋

Webプログラミングを餌に生きる犬のメモ帳

Gitの基本操作を勉強したのでメモしておく。
 

リポジトリを複製する

リモートリポジトリの内容をローカルに複製(ダウンロード)することができる。リポジトリにはrsync://example.com/path/to/repo.git/git://example.com/path/to/repo.git/ssh://[user@]example.com[:port]/path/to/repo.git/などの形式で対象を指定することができる。

git clone リポジトリ

 

リポジトリを作成する

カレントディレクトリにリポジトリを作成する。

git init

 

ブランチの一覧表示する

ローカルリポジトリに存在するブランチの一覧を表示する。

git branch

 

ブランチを作成する

ローカルリポジトリにブランチを新しく作成する。

git branch ブランチ名

 

ブランチの名前を変更する

checkoutしているブランチの名前を変更する。

git branch -m 変更後の名前

 

ブランチを削除する

ローカルリポジトリのブランチを削除する。

git branch -D ブランチ名

 
リモートリポジトリのブランチも削除する場合は,プッシュすれば良い。プッシュコマンドは以下のような書式で記述できる。
git push プッシュ先リポジトリ ローカルのブランチ名:リモートのブランチ名
なので,リモートのリポジトリを削除するには,ローカルのブランチを削除した状態で以下のようにプッシュすれば良い。

git push origin :ブランチ名

 

ブランチを切り替える

リモートリポジトリのブランチを取得し,ローカルリポジトリのブランチの内容を書き換える。

git checkout ブランチ名

 

ファイルを編集前の状態に戻す

リモートリポジトリのブランチからファイルを取得する。

git checkout ファイルパス

 

現在のブランチに含まれる内容を基に,新しいブランチを作成する

現在checkoutしているブランチの内容を基にして,新しいブランチを作成する。

git checkout -b ブランチ名

 

ブランチに他のブランチの内容をマージする

checkoutしているブランチに他のブランチの内容をマージする。マージした結果,コンフリクトが起こることもある。
コンフリクトが起こった場合は,手動でソースコードを修正する必要がある。

git merge ブランチ名

 

リモートリポジトリの内容を取り寄せる

リモートリポジトリのブランチの内容を取り寄せる。取り寄せただけでローカルリポジトリのブランチへのマージは行われない。

git fetch

 

リモートリポジトリの内容を取り寄せて,マージする

リモートリポジトリのブランチの内容を取り寄せ,マージを行う。

git pull

 

リモートリポジトリの内容を取り寄せて,リベースする

リモートリポジトリのブランチの内容を取り寄せ,リベースを行う。
新しくコミットを積む前にgit pullし忘れた場合や,コミット(枝分かれ)をキレイにしたいときに使う。

git pull --rebase

 

ブランチのコミット履歴を確認する

checkoutしているブランチに積まれているコミットの履歴を確認する。

git log

 

変更のあるファイルを確認する

変更のあるファイルを確認する。

git status

 

ファイルの差分を確認する

編集したファイルの,元の状態との差分を確認する。

git diff

 

ファイルの更新をステージング反映する

ファイルの更新をステージング(commit可能な状態)に反映する。

git add ファイルパス

 

ファイルの削除をステージングに反映する

ファイルの削除をステージング(commit可能な状態)に反映する。

git rm ファイルパス

 

更新内容をステージングから外す

ファイルの編集内容はそのままで,ステージングからファイルを外す(addをする前の状態に戻す)。

git reset

 

全ての内容を元に戻す

ファイルの編集内容ごと,全てのファイルを元の状態に戻す。
※HEAD~1やHEAD~2などと指定すると,いくつか前のコミットまで戻ることが出来る。

git reset --hard HEAD

 

ブランチに更新内容を反映する

checkoutしたブランチに対して自分で追加した更新内容を反映する。

git commit

 
–amendオプションを付けることで,1つ前のコミットに対してコミットの内容を上書きすることが出来る。

git commit --amend

 

ローカルリポジトリのコミットをリモートリポジトリに反映する

ローカルリポジトリで積んだコミットをリモートリポジトリに反映することが出来る。

git push origin HEAD

 
–amendを使ったコミットなどを行った場合は,-fオプションを付けることでプッシュすることができる。

git push -f origin HEAD

 

コミットの歴史を書き換える

派生元のコミットを最新のコミットにすることが出来る。masterの古いコミットを元に派生したブランチがあった場合,そのブランチをmasterの最新のコミットを元に派生したブランチにすることが出来る。

git rebase ブランチ名

 
コミットの歴史を書き換えることが出来る。実行すると,エディタが立ち上がりコミットの編集モードへと入る。
※originを指定することでリモートのブランチを基にしてコミットの歴史を書き換える。

git rebase -i origin ブランチ名

 

rebaseした内容を完了する

rebaseによるコミット履歴の変更を完了する。

git rebase --continue

 

rebaseした内容を元に戻す

rebaseによるコミット履歴の変更を取り止める。

git rebase --abort

 

特定のコミットへ戻る

reflogでコミットのハッシュ値を調べる。

git reflog

 
reflogで調べたハッシュを使い,resetで特定のコミットへ戻る。

git reset --hard ハッシュ値

 

他のブランチの特定のコミットを適用する

cherry-pickで特定のコミットのみをつまみ食いする。
reflog,もしくは他の情報から調べたハッシュ値を使用する。

git cherry-pick ハッシュ値

 

コミットを打ち消す(コミット履歴は積まれる)

ブランチへのコミットを打ち消す。コミットが無かったことになるように見えるが、実際はコミット履歴は積まれているかたちで変更が加わる。打ち消したいコミットハッシュを指定して使用する。ここには枝分かれしたブランチ名も指定することが出来る。

git revert コミットハッシュ

 

複数のファイルの内容を検索する

複数のファイルから,特定のキーワードにマッチする行を検索することが出来る。

git grep キーワード

 

問題のあるコミットを探索する

2分岐探索によって,バグが混入したコミットを探すことが出来る。

git bisect start 問題のあるコミットハッシュ 問題のないコミットハッシュ

※「問題のあるコミットハッシュ」には,バグが混入している最新のコミットハッシュを指定し,「問題のないコミットハッシュ」には,適当に時系列を遡って見つけたバグのまだ混入していない状態のコミットハッシュを指定する。
 
「問題ある」「問題ない」の判定は以下のコマンドで行う。

git bisect bad
git bisect good

 
この判定を何度か繰り返すことで,問題のあるコミットを絞り込むことができる。
 
探索が終了したら,以下のコマンドによってbisectモードを終了する。

git bisect reset

 

ファイルの変更内容を一時保存する

作業途中にレビュー依頼などがきて,他のブランチに切り替えたい場合,変更内容を一時保存しておくことが出来る。

git stash save

 
一時保存した変更内容が積まれたリストを確認する。

git stash list

 
一時保存した変更内容を取り出す。

git stash pop

 
一時保存したものが溜まり過ぎると,どんな変更内容だったのかが分からなくなるので,基本的には一時保存する内容は一つまでにして運用すると良い。
 
 
以上
 
 
参考
会社の先輩からの指導
Learn Git Branching
初心者でも分かる!git rebaseの使い方を解説します | 株式会社LIG

GoFデザインパターン Strategyパターンについて arrow-right
Next post

arrow-left 「インターフェースに対してプログラミングする」という設計原則について
Previous post

コメントを残す