#概要
git関連でたまに使うコマンドリンクをまとめて見られるようにメモ
##ブランチ一括削除
//while
git branch | grep <文字列> | while read branch ; do git branch -d ${branch} ; done ;
//xarges
git branch | grep <文字列> | xargs git branch -d
##特定コミット抽出して反映(cherry-pick)
https://qiita.com/ta__ho/items/8204a22a53b02ee0817e
https://img.atwikiimg.com/www8.atwiki.jp/git_jp/pub/git-manual-jp/Documentation/git-cherry-pick.html
//-nを付けるとstageの状態で止まる
git cherry-pick -n <コミットID>
//マージコミットを抽出したい場合
git cherry-pick -n -m 1 <コミットID>
##別リモートリポジトリを同じremote内に追加
・別リモートリポジトリを追加した時点でcherry-pickで別リポジトリから抽出は可能
・チェックアウトした別リモートリポジトリのブランチをマージすることも可能
//同じ場所にリモートリポジトリを追加。ローカル名は何でもいい。origin_testとか。
git remote add <ローカル名> <url>
git fetch <ローカル名>
//追加したリモートリポジトリからブランチチェックアウト
git checkout -b <任意のブランチ名> <ローカル名>/<抽出したいブランチ>
##submodule削除・再追加
http://takaaki-kasai-tech.blogspot.com/2014/02/how-to-remove-git-submodule-using-each-version.html
https://qiita.com/kinpira/items/3309eb2e5a9a422199e9
※git バージョンが1.8.5以上の場合。
$ git submodule deinit path/to/submodule
$ git rm path/to/submodule
$ rm -rf path/to/submodule
$ git submodule add 【リポジトリURL】 【追加したいディレクトリ】
//具体例
$ git submodule deinit -f aaa/bbb
$ git rm aaa/bbb
$ git submodule add https://git.git aaa/bbb
※git バージョンが1.8.3未満は以下を個別に削除する必要がある。
//削除するサブモジュールの場所。
.git/config
.gitmodules
//git rm でサブモジュールパス削除
.git/modules/aaa/bbb
//rm -rf で直接サブモジュールパス削除
##コンフリクト一方修正
//現在ブランチの修正に変更
$ git checkout --ours AAAA.txt
//マージする側ブランチの修正に変更
$ git checkout --theirs fileB.txt
//実行後はaddする
$ git add <ファイル名>
##コミット打ち消し・修正・取消
https://qiita.com/kansiho/items/2bacecdb95d752cb38b7
https://qiita.com/ritukiii/items/74ee3274c3f218511a0c
https://qiita.com/chihiro/items/2fa827d0eac98109e7ee
・reset
・amend
・revert
・【危険】push -f
//ローカル上で修正残して直前コミット取消
git reset --soft HEAD^
//ローカル上で修正含めて直前コミット取消
git reset --hard HEAD^
//ローカル上でコミット直後に再度直前コミットのソース修正・コメント修正等をして、同じコミットにしたい場合
git commit --amend
//取り消した内容を残してコミットする
git revert <commit>
//戻したい位置までコミット戻してリモート強制更新
git reset --hard <commit_id>
git push origin HEAD --force
##差分抽出
//[1]取得ソースの branch名/hashtag/tag名
//[2]ベースのbranch名/hashtag/tag名
//[3]変更あるbranch名/hashtag/tag名
git archive [1] `git diff --name-only [2] [3] --diff-filter=ACMR` -o [zipファイル名].zip
##stage から Unmerged paths,Untracked filesに戻す・削除
https://qiita.com/rch1223/items/9377446c3d010d91399b
※戻す方法は上記にいろいろ載ってる
https://qiita.com/k0uh0t/items/ae885bf2d5e05614b80f
//stage から Unmerged paths
git reset <ファイル名>
git reset .
//変更前に戻す
git reset HEAD <ファイル名>
//gitから削除
git rm -rf フルパス
//Untracked filesのディレクトリ含めた削除
git clean -fd
##コンフィグ関連
・文字コード設定とか
https://nekonenene.hatenablog.com/entry/2015/04/18/210706
・git logが見やすくなる
https://blog.toshimaru.net/git-log-graph/
・git for windows改行関連
https://qiita.com/uggds/items/00a1974ec4f115616580