Git

やっておくべき設定

.gitignore_global

共通の.gitignoreを書く。 ここに書くのは.vscode/.idea/など、環境依存のファイルを書く

~/.gitignore_global

.idea/
*.iml

空コミットで CI を起動する

git commit --allow-empty -m "empty commit"

git diff で日本語が文字化けしないようにする

git config --global core.pager "LESSCHARSET=utf-8 less"

Ref: https://maku77.github.io/git/settings/garbling.html

基本コマンド

ブランチ間の差分を見る

branchAのほうが古いブランチとしてみる。

git diff [branchA] [branchB]
# ex) git diff master develop

リネームする

git mv [org] [dst]

git config

リポジトリごとで設定

git config --local user.name koya
git config --local user.email 4769754+hako1912@users.noreply.github.com

リポジトリごとの設定を強制

git config --global user.useConfigOnly true

リモートの全ブランチをフェッチ

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all

フォルダ名の大文字小文字変更

エディタでディレクトリ名を変更したときに git の差分として認識されるようにする。

git config core.ignorecase false

=======

実行権限を付与

git update-index --add --chmod=+x [filename]

コミット前にフォーマット

ex) kotlin の場合

./gradlew ktlintFormat

for FILE in `git diff --name-only | grep .kt`; do
  git add $FILE
done

派生元ブランチを調べる

https://qiita.com/upinetree/items/0b74b08b64442f0a89b9

git show-branch | grep '*' | grep -v "$(git rev-parse --abbrev-ref HEAD)" | head -1 | awk -F'[]~^[]' '{print $2}'

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

やっちまったときに。

git reset --soft HEAD^

リモートのブランチを新規 pull

# git pull origin [リモートブランチ名]:[ローカルブランチ名]
git pull origin dev:dev

ローカルをリモートで上書き

git fetch --all
git reset --hard origin/master

ブランチを指定して clone

git clone -b [ブランチ名] [リポジトリURL]

プロジェクト名(ディレクトリ名)を指定して clone

git clone [リポジトリURL] [ディレクトリ名]

git 管理外のファイルを削除

# 確認
git clean -n
# 実行
git clean -f
# ディレクトリも削除するときは-d
git clean -fd

便利コマンド

現在のブランチ名を表示

git rev-parse --abbrev-ref HEAD

Ref: (Git で今いるブランチを簡単に探す)[https://qiita.com/negito6/items/01e0eddb0bd281d85206]

Tips

マージ済みのローカルブランチを削除する

git branch --merged master | grep -v '^[ *]*master$' | xargs git branch -d

ブランチ命名

Git/GitHub branching standards & conventions