git 備忘録

用語整理

  • ワーキングツリー:実際に作業中のファイルたち
  • ローカルレポジトリ: ローカルのレポジトリ
  • ステージング:コミット準備がととのった状態にあるファイルたち
  • リモートレポジトリ: リモートにあるレポジトリ(みんなで使うことが多いから共有レポジトリって呼んだりもする!)

1. 表示系

コミット履歴とかを表示する系のやーつ

コミット履歴表示

1
git log

変更したファイルを表示

1
git log --name-status

過去の特定のファイルの変更内容を見る

1
git log -p {path}

commitメッセージからキーワードで検索

1
git log --grep hoge

あのファイルのあの行誰が更新したのか確認

1
git blame

2.git commit

コミットする際につかうやーつ

とりあえず状況確認

どのファイルがステージングにあがっていてーとか、どのファイルが追加になったやつでーとかがみれる。

1
git status

修正前と修正後の差分を見る

コミットする前にどのファイルが更新されたか確認できる。

1
2
git diff
git diff {path}

ステージングにあげる

1
2
git add .
git add {ファイル名}

ステージングにあげたやつをとりけす(アンステージング)

1
2
git reset HEAD
git reset HEAD -- <ファイル名>

部分的にステージングにあげる

1
git add -p ファイル名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Blog {
private $title;

function __construct() {
}
+
+ public function set_title($title) {
+ $this->title = $title;
+ }
+
- public function get_title() {
- return $this->title;
- }
}
Stage this hunk [y,n,q,a,d,/,K,g,s,e,?]?

ハンク(ある程度に区切られた変更範囲)ごとに対話形式でどう対処するか選べる

y: ハンクをまるごとステージングへ
n: ハンクをステージングへあげない
e: 編集モード(vi)で部分的にステージングへあげる

  • ‘-‘の行をaddしたくなければ、’-‘を’ ‘(空白)にする。
  • ‘+’の行をaddしたくなければ、’+’の行を消す。
  • 先頭に#と書かれている行はaddされない

ステージングにあがっているファイルの差分を見る

1
git diff --cached

ステージングにあがっていないファイルの差分を見る

1
git diff

ファイル名変更

1
git mv -f js/app.js js/App.js

3.過去改竄系。。。

一個前のコミットをなかったことに

HEADだけ一個前に戻す

ステージング・ワーキングツリーは維持される。

1
git reset --soft HEAD^

HEAD・ステージングだけ一個前に戻す

ワーキングツリーは維持される。
一個前のコミットでアンステージングされた状態。

1
git reset --mixed HEAD^

HEAD・ステージング・ワーキングツリーを一個前に戻す

一個前のコミットでまっさらな状態になる。

1
git reset --hard HEAD^

一個前のcommitを編集

1
git commit --amend

例1) ファイルを追加しわすれた

1
2
git add aaa.txt
git commit --amend

例2) ファイルを間違って追加してしまった

1
2
git rm aaa.txt
git commit --amend

二個以上前のcommitを編集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 一旦編集対象のコミット履歴を下記コマンドで表示

# 最新の3コミットを対象にする
# git rebase -i HEAD~3
# 特定のコミット以前を対象とする(git log --onelineで一覧表示すると便利)
# git rebase -i {revision}~

# 出力結果
pick <コミット1のhash> test_1.htmlファイルを修正
pick <コミット2のhash> test_2.htmlファイルを修正
pick <コミット3のhash> test_3.htmlファイルを修正

# 編集漏れがあったコミットの「pick」の個所を「edit」に変更
pick <コミット1のhash> test_1.htmlファイルを修正
edit <コミット2のhash> test_2.htmlファイルを修正
pick <コミット3のhash> test_3.htmlファイルを修正

# その後
git add test_2.html
git commit --amend
git rebase --continue

一番最初のコミットをrebaseする←普通にやるとできないの以下の方法で!

1
git rebase -i --root

4.stash

変更中に他のブランチへの追加・変更をしたいときに一旦退避するやーつ

一時退避!

1
git stash save {スタッシュ名}

一時退避してるリスト

1
git stash list

リスト

1
2
3
<stash名1>: WIP on <stashを行ったブランチ名>: <ハッシュ> <コミットコメント>
<stash名2>: WIP on <stashを行ったブランチ名>: <ハッシュ> <コミットコメント>
<stash名3>: WIP on <stashを行ったブランチ名>: <ハッシュ> <コミットコメント>

復活

1
git stash save {スタッシュ名}

削除

1
git stash drop {スタッシュ名}

復活しつつ削除

1
git stash pop {スタッシュ名}

5. branch

ブランチのやーつ

ブランチ作成

1
git branch {ブランチ名}

ブランチ一覧表示

1
git branch

リスト

1
2
develop
*master

ブランチをきりかえる(チェックアウト)

1
git branch {ブランチ名}

ブランチを作成しつつチェックアウト

1
git checkout -b {ブランチ名}

ブランチ削除

1
git branch -d {ブランチ名}

ブランチを結合(マージ)

1
2
git checkout {マージさせたいブランチ名}
git merge --no-ff {マージしたいブランチ名}

ローカルブランチとリモートブランチの関連づけ

git pull origin masterってやらなくてもgit pullだけでよくなる

1
git branch --set-upstream develop origin/develop

6. remote操作

リモートのレポジトリのやーつ

リモートリポジトリ表示

1
git branch -a

リモートリポジトリをチェックアウト

コメント「-b」はローカルにリモートブランチのデータをおとしつつ、ローカルブランチの切り替えも行ってくれる。

1
2
3
git checkout -b {ローカルブランチ名} {リモートブランチ名}

# 例: git checkout -b develop origin/develop

リモートリポジトリをローカルから削除

1
2
3
4
git remote remove {名前}

# 例
$ git remote remove origin

リモートリポジトリを変更

1
git remote set-url origin {リモートブランチレポジトリ}

アーカイブ

変更された差分ファイルを抽出するのに便利そう

とりあえず全ファイルをzipでアーカイブ

1
git archive --format=zip HEAD -o archive.zip

あるコミットからの差分をzipでアーカイブ

1
2
# 3つ前のコミットからの差分
git diff --name-only HEAD HEAD~3 | xargs tar czf ./ver_diff.tar.gz
1
2
# あるコミットからあるコミットの差分
git diff --name-only コミットA コミットB | xargs tar czf ./ver_diff.tar.gz

運用編

リモートブランチとローカルブランチ※1を同期
※1. リモートブランチを参照してるローカルブランチ

1
git fetch

リモートブランチとローカルブランチの差分を表示

1
2
3
4
# 差分があるファイル一覧を表示
git diff --name-status リモートブランチ
# ファイルの差分を表示
git diff リモートブランチ

リモートブランチとローカルブランチをマージ

1
git merge リモートブランチ

Please share