Git Git/SourceTree使用方法

個人での利用

リモートリポジトリ(remote)
git remote -v
ステージング(add)
全てインデックスに追加
git add .
指定ファイルをインデックスに追加
git add test.txt
作業コピーの変更をインデックスに登録
コミット(commit)
コミット
git commit -m "コメント"

コミットコメント変更
git commit --amend
viコマンドで変更して保存

ステージングされた作業コピーの変更をローカルブランチに登録
コミットログ(log)
全ファイル
git log

特定ファイル
git log 〜/〜.php

パス指定
git log -p 〜/〜

特定ブランチ
git log --first-parent staging

まとめる
git log --word-diff -p 〜/〜php

古い順に並べる
git log --reverse

日付指定
git log --after '2023/03/01' --before '2023/03/31'

ユーザー指定
git log --committer=aaa
git log --author=aaa

マージ除く
git log --no-merges
git log --merges(マージコミットのみ)

コメントのみ
git log --oneline

グレップ(grep)
git grep

単語単位
git grep -w '検索文字'

正規表現
git grep -E '検索文字'

&検索
git grep -e '検索文字1' --and -e '検索文字2'

パス指定
git grep '検索文字' -- 'app/controllers/'

パス除外
git grep '検索文字' -- ':!app/controllers/'

行番号表示
git config --global grep.lineNumber true

ショウ(show)
現在のコミットの状態表示
git show
commit abcdefg (HEAD -> staging, origin/staging)
Merge: aaaaa bbbbb
aaaa というコミットとbbbbというコミットがマージされてabcdefgになったという意味

指定のコミットの状態表示
git show コミットID(SHA-1)

コミット追跡(blame)
指定ファイルの各行のコミット履歴表示
git blame -s 〜/〜.php

ブランチ(branch)
ブランチ一覧
git branch

ブランチ一覧(リモート含む)
git branch -a

現在のブランチ
git branch --contains=HEAD

現在のコミットからTESTブランチを作成
git branch test

beforeブランチからafterブランチを作成
git branch after before

ブランチを削除
git branch -d test

現在のブランチにマージされていないブランチ一覧
git branch --no-merged

現在のブランチにマージされているブランチ一覧
git branch --merged

リモートブランチを削除
git push origin --delete branch_name

ブランチ詳細一覧
git show-branch

親ブランチ
git show-branch | grep '*'

現在のコミットからブランチを作成
ローカルブランチを複製
チェックアウト(checkout)
別ブランチのコミットに移動
git checkout ブランチ名

リモートブランチをローカルにチェックアウト
git checkout -b ローカルブランチ名 origin/リモートブランチ名

特定ファイルのみチェックアウト
git checkout ローカルブランチ名 --ファイルパス

特定ファイルのみ元に戻す
git checkout --ファイルパス


過去/未来のコミットに移動
別ブランチのコミットに移動
→ 作業コピーのファイル状態は移動先のコミット状態に変更される
マージ(merge)
更新されたリモート追跡ブランチを、現在のローカルブランチにマージ
git merge FETCH_HEAD

別ブランチを現ブランチにマージ
git merge 別ブランチ

コンフリクト時
コンフリクトファイルを修正
git commit

別ブランチの状態に合わせる」も参照

チェックアウトしているブランチへ別ブランチの変更を取り込む
リベース(rebase)
git rebase 別ブランチ

コンフリクト等によって中断した場合の再開
git rebase --continue

チェリーピック(cherrypick)
別ブランチの特定コミットのみマージ
git cherry-pick [取込対象コミットID]
リセット(reset)
コミット状態を戻す
git reset (オプション) (戻す位置)
戻す対象

オプション HEAD インデックス 作業ツリー
--hard
--mixed
--soft

 

戻す位置

位置 機能
HEAD^ 直前のコミット
HEAD 現在のコミット

 

HEAD、インデックス、作業ツリーを戻す
git reset --hard ~
HEAD、インデックスを戻す
git reset --mixed ~
HEADを戻す
git reset --soft ~
HEAD^(直前のコミット)を戻す
git reset --hard HEAD^
コミット後の変更を戻す
git reset --hard HEAD
コミット後の変更を戻す(特定ファイルのみ)
特定ファイルのみ元に戻す」参照

別ブランチの状態に合わせる
git reset --hard origin/master

リバート(revert)
コミットの打ち消し
git revert コミットID

コミットの打ち消し(ファイル単位)
git checkout コミットID ファイル名
git commit

マージの打ち消し
1) git show
ショウ」参照
revertする際はaaaaaに戻すのか、bbbbbに戻すのかの選択が必要
aaaaaを1、bbbbbを2で指定する

2) git revert -m 1 abcdefg

履歴からファイル削除(filter-branch)
git filter-branch -f --tree-filter 'rm -f test/test.txt' HEAD
スタッシュ(stash)
作業コピーの変更を退避

チームでの利用

クローン(clone)
リモートブランチをローカルブランチとしてコピー
【手順】
「ファイル」メニュー > 「新規/クローンを作成する」
git clone https://github.com/ユーザ名/レポジトリ.git
フェッチ(fetch)
リポジトリ:originのmasterブランチのコミットをリモート追跡ブランチに更新
git fetch origin master
リモートブランチの変更をリモート追跡ブランチに更新(1)
その後、リモート追跡ブランチの変更を作業コピーにマージ(2)する必要がある
PULLは(1)~(2)を同時実行する
プル(pull)
リポジトリ名:originのmasterブランチのコミットをローカルブランチに更新
git pull origin master
レポジトリ名設定
git remote add 別名 https://github.com/ユーザ名/レポジトリ.git
【強制pull】
コンフリクトを無視してリモートに合わせる
フェッチ
git fetch origin master
②リモート追跡ブランチのorigin/masterまで戻す
git reset --hard origin/master

別ブランチの状態に合わせる」参照

リモートブランチのコミットをローカルブランチに更新
プッシュ(push)
リポジトリ名:originへローカルのmasterブランチのコミットを更新
git push origin master

ローカルのcommitをリモートへ強制更新
git-hubのブランチでの設定が必要
git push origin master -f

リポジトリ名:originのmasterブランチへ、ローカルのtestブランチのコミットを更新
git push origin test:master

ローカルブランチのコミットをリモートブランチに更新