Gitでやりたいことをやりたい時に参考にするサイト集

# rebase
- [これで完璧! 図解でわかるgit rebaseの2つの使い方! | 侍エンジニア塾ブログ（Samurai Blog） - プログラミング入門者向けサイト](https://www.sejuku.net/blog/71919)

# 〇〇を設定したい

|やりたいこと|コマンドで設定する場合|ユーザーの.gitconfigに書く場合|参考サイト|
|:--|:--|:--|:--|
|クローンしても<br>改行コードを変えたくない|`$ git config --global core.autoCRLF false`|[core]<br>&nbsp;&nbsp;&nbsp;&nbsp;autoCRLF = false|[windows環境の git で改行コードの自動変換に注意 - Qiita](https://qiita.com/yokoh9/items/1ec8099696ade0c1f36e)<br/>[【git】git add したらCRLF will be replaced by LF  - くわこのpermission denied.](https://mask.hatenadiary.com/entry/2014/10/03/161855)|
|ローカルブランチ名と同名で<br>リモートブランチにpushしたい|`$ git config --global push.default current`|[push]<br>&nbsp;&nbsp;&nbsp;&nbsp;default = current|[gitのpush.defaultに関するノウハウ](https://qiita.com/awakia/items/6aaea1ffecba725be601)|
|日本語ファイルの文字化けを直したい|$ git config --global core.quotepath false|[core]<br>&nbsp;&nbsp;&nbsp;&nbsp;quotepath = false|[日本語のファイル名が文字化けした時の対応方法 - Qiita](https://qiita.com/ponsuke0531/items/ef2a0ef71bc3888871f5)|
|設定ファイルを開きたい|`$ git config --edit --global`|||



```bash:設定を確認したい
# 実行した場所で有効になっている設定を見たい(リポジトリと関係ないとこで実行するとsystemとglobalが見れる。)
$ git config -l

# システムの設定だけみたい
$ git config --system -l

# ユーザー固有の設定だけみたい
$ git config --global -l

# 任意のリポジトリの設定だけみたい
$ git config --local -l
```



- [設定ファイルの場所 - Qiita](https://qiita.com/ponsuke0531/items/ddde9c80360777a991fc#git%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB)
- [git で 「warning: CRLF will be replaced by LF in X」が直るかも知れない方法 - Qiita](https://qiita.com/shunsuke_takahashi/items/d02f8085451b9aa4ffcf)

# リポジトリを〇〇したい
```bash
# ディレクトリ名を指定してクローン
$ git clone {url} {ディレクトリ名}
# ブランチを指定してクローン
$ git clone -b {ブランチ名} {url}
# フェッチ
$ git fetch origin
# フェッチ : 削除されたリモートブランチをoriginから削除
$ git fetch --prune
# フェッチ : 全ブランチを更新して削除されたブランチもoriginから削除
$ git fetch --all --prune
# プル
$ git pull origin

/**リポジトリを最初に作ってプッシュ*/
# 初期化して
$ git init
# リポジトリを設定して
$ git remote add origin {リポジトリのURL}
# コミットしたいファイル対kして
$ git add {ファイル}
# コミットして
$ git commit -m '{コミットコメント}'
# プッシュする
$ git push origin master
```
- [ディレクトリ名を指定してクローンする方法 - Qiita](https://qiita.com/ponsuke0531/items/de829343ed083d9efac8)
- [一部のディレクトリだけ取得する方法 - Qiita](https://qiita.com/ponsuke0531/items/1e0ab0d6845ec93a0dc0)
- [BacklogのGitをSSHでクローンする方法 - Qiita](https://qiita.com/ponsuke0531/items/d434e04bd3c63e2d2c41)
- [Gitのcommitメッセージを複数行入れる方法 - Qiita](https://qiita.com/mimickn/items/586eb64e9da5b5c63e4f)
- [Gitのコミットメッセージを後から変更する方法をわかりやすく書いてみた | 株式会社グランフェアズ](https://www.granfairs.com/blog/staff/git-commit-fix)
- [既に存在するリポジトリのファイルをチェックアウトしないでディレクトリを追加する方法 - Qiita](https://qiita.com/ponsuke0531/items/245bd85106a547e6d6a6)

# ブランチを〇〇したい

```bash
# ブランチを作ってコミットなしブランチだけプッシュしたい
$ git checkout -b {ブランチ名}
$ git push -u origin {ブランチ名}

# ブランチを確認したい(ローカル)
$ git branch
# ブランチを確認したい(リモート)
$ git branch -r

# ブランチ名を変更したい(ローカルブランチ名を変更 > リモートブランチ削除 > ローカルブランチPush)
$ git branch -m {旧ブランチ名} {新ブランチ名}
$ git push origin :{旧ブランチ名}
$ git push origin {新ブランチ名}

# 今のブランチを確認したい
git branch --contains=HEAD

# プッシュしていないコミットを確認したい
$ git log origin/{ブランチ}..{ブランチ}

# ユーザー名とメールアドレスを指定してコミットしたい
$ git -c user.name='ユーザー名' -c user.email='メールアドレス' commit -m 'コミットコメント'

# シンプルに(-s --short)まだコミットしていないものを見たい
$ git status -s
```

- [現在のブランチ名を取得するコマンド - Qiita](https://qiita.com/usamik26/items/8aa6c3aed4b9c7dba5ca)
- [ファイルを指定してコミットする方法 - Qiita](https://qiita.com/ponsuke0531/items/1a899d58daad15c4f2b6)
- [git status -s でちょっと幸せになれる - Qiita](https://qiita.com/tommy_aka_jps/items/af536a7c20747f99aa42)
- [gitでまだpushしていないcommitを確認する方法 | さるまりんのガレージ](https://salumarine.com/how-to-see-commits-not-pushed-to-the-origin-yet/)

# stashしたい
```bash
// stashの一覧を確認したい
$ git stash list
```

- [stashする方法 - Qiita](https://qiita.com/ponsuke0531/items/79642c9a41f5c1eeb0b8)
- [stashを適用する方法 - Qiita](https://qiita.com/ponsuke0531/items/2229495ba7e7c3dc0e01)

# タグを〇〇したい
```bash
# 既存タグの確認(コメントを添えて)
$ git tag -n

# 既存タグの確認(リモートの)
$ git ls-remote --tags

# 軽量タグを打ってPush
$ git tag {タグの名前}
$ git push origin {タグの名前}

注釈をエディタで書いてタグを打つ
$ git tag -a {タグの名前}

注釈も書いてタグを打つ
$ git tag -am {注釈の内容} {タグの名前}

タグを削除してPush
$ git tag -d {タグの名前}
$ git push origin :{タグの名前}
```

- [タグ | サルでもわかるGit入門](https://www.backlog.jp/git-guide/stepup/stepup4_1.html)
- [remoteにあるtag一覧を確認する - 備忘録 〜プログラミング〜](http://buchi.hatenablog.com/entry/2015/02/27/122830)

# チェリーピックしたい
```bash
# 特定のコミットとコミットの間を全部チェリーピック
$ git cherry-pick {特定のコミットのハッシュ1}..{特定のコミットのハッシュ2}

# マージのコミットをチェリーピック
$ git cherry-pick -m 1 {MergeのCommitのハッシュ}
```

- [Gitで何回もコミットとマージをしたブランチをコミットだけをチェリーピックしてブランチ造り直す方法](http://qiita.com/ponsuke0531/items/075ee81e2ca489f7ba15)
- [Gitに error: commit ハッシュ is a merge but no -m option was given. と怒られて知った マージをチェリーピックする方法](http://qiita.com/ponsuke0531/items/5461c5a36138119a9c6b)

# ハッシュを〇〇したい
```bash
# HEADのハッシュを見たい
$ git rev-parse HEAD

# ハッシュ値が含まれているブランチをリモートのブランチからリストアップする
$ git branch -r --contains {ハッシュ値}
```
- [gitでハッシュ値を取得 - Qiita](http://qiita.com/quattro_4/items/55e99a2c008c6875f267)
- [特定のコミットが含まれているブランチをリストアップする - valid,invalid](https://ohbarye.hatenablog.jp/entry/2016/07/20/003903)


# 差分を見たい
```bash
# ローカルの変更を確認したい
$ git diff HEAD
# ブランチで差分
$ git diff {ブランチA} {ブランチ名}
# コミットのハッシュで差分
$ git diff --stat --name-only {コミットA} {コミットB}
# タグで差分
$ git diff --name-only {old tag name} {new tag name}
# 特定ファイルの差分
$ git diff {old tag name} {new tag name} {特定ファイル}
# 特定フォルダ配下の差分
$ git diff --name-only {old tag name} {new tag name} {特定ディレクトリ}
```

- [Git - git-diff Documentation](https://git-scm.com/docs/git-diff)
- [Gitを使って差分ファイルと差分情報を簡単に納品するコマンドのメモ - Qiita](http://qiita.com/hironaito/items/9b5135698ea1a497a3c0)
- [Git リポジトリの内容を zip ファイルにする - Qiita](http://qiita.com/usamik26/items/9a2d14aea30cb01a60c6)
- [git diffでブランチ間のファイル差分を確認するあれこれ | EasyRamble](http://easyramble.com/git-diff-between-branches.html)

# 履歴を見たい

```bash
$ git log [オプション]

# 変更したファイル名を見たい
$ git log --name-only {(必要なら)ハッシュ}

# 履歴を見る(タグ情報添え)
$ git log --decorate

# 履歴を見る(Diff添え)
$ git log -p

# 履歴を見る(ファイル指定)
$ git log -p {ファイルパス}

# {x}個分コミットの履歴を見る
$ git -p -{x} --{fileNameへのパス}

# ハッシュだけみたい(コメントを添えて)
$ git log --pretty=oneline
# ハッシュだけみたい(本当にハッシュだけ)
$ git log --pretty=oneline | awk '{print $1}'

# 特定日以降だけみたい
$ git log --after='2017-08-10 00:00:00'

# オプションを忘れたので確認したい
$ git log -help

# マージの履歴を見たい----------------------------------
# マージだけみたい
$ git log --merges
# 直近マージされたファイル名を見たい
$ git log -m -1 --name-status
# マージ以外だけみたい
$ git log --no-merges
# マージ元を非表示
$ git log --first-parent

# 履歴から探したい----------------------------------
# コミットのハッシュ値全部見る
$ git rev-list --all
```

- [Git - コミット履歴の閲覧](https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E5%B1%A5%E6%AD%B4%E3%81%AE%E9%96%B2%E8%A6%A7)
- [git logのオプションあれこれ - 煙と消えるその前に](http://heart-shaped-chocolate.hatenablog.jp/entry/2013/07/16/035104)
- [git log よく使うオプションまとめ - Qiita](http://qiita.com/take4s5i/items/15d8648405f4e7ea3039)
- [git logでコミットハッシュだけほしい - DRYな備忘録](http://otiai10.hatenablog.com/entry/2016/06/15/072039)
- [Gitで特定ファイルの変更履歴をみる - Bye Bye Moore](http://shuzo-kino.hateblo.jp/entry/2014/05/22/222251)
- [マージされたファイル名を見たい](http://te2u.hatenablog.jp/entry/2014/01/07/215228)
- [全ブランチから文字列検索・全コミットから文字列検索 - Qiita](https://qiita.com/yuba/items/852d019af48ee7ccd92e)







# とにかく戻したい！消したい！削除したい！
```bash
# ブランチを削除したい(普通)
$ git branch -d {branch名}
# ブランチを削除したい(強制)
$ git branch -D {branch名}
# ブランチを削除したい(リモート)
$ git push -d origin {ブランチ名}

# 特定のファイルだけ戻したい
$ git checkout {コミットのハッシュ値} {ファイルパス}

# ローカルの変更をなかったことにしたい(全部)
$ git reset --hard HEAD
# ローカルの変更をなかったことにしたい(特定ファイル)
$ git checkout {ファイル名}

# addを取り消したい
$ git reset HEAD .

# 直前のコミットを取り消したい
$ git reset --soft HEAD^
```

- [git: 特定のディレクトリだけあるバージョンに戻したい - Qiita](http://qiita.com/suin/items/21189964af3c24f286da)
- [gitで特定のファイルだけ前の状態に戻したいときのコマンド - うめすこんぶ](http://konbu13.hatenablog.com/entry/2014/12/01/070255)
- [Git の履歴からファイルを完全に削除する &#8211; git filter-branch | EasyRamble](http://easyramble.com/git-filter-branch.html)
- [Git リポジトリに上がっているファイルを履歴ごと消すには？ - Qiita](http://qiita.com/go_astrayer/items/6e39d3ab16ae8094496c)
- [Gitのcheckoutでローカルのファイルを戻す - console.lealog();](http://lealog.hateblo.jp/entry/2012/09/21/000533)
- [Git でローカルの変更を元に戻す - present](http://tnakamura.hatenablog.com/entry/20090504/1241398150)
- [git commit を取り消して元に戻す方法、徹底まとめ | WWWクリエイターズ](http://www-creators.com/archives/1116)
- [いろいろ取り消したい - Qiita](https://qiita.com/tani-shi/items/3419600447292abf6c79)
- [Git GUIでファイルを指定して変更を破棄する - Qiita](https://qiita.com/ponsuke0531/items/7fcbf6d220aad76ac5bb)

# 名前を変更したい
```bash
# ディレクトリ名
$ git mv {古いディレクトリ名} {新しいディレクトリ名}
```

- [Gitでディレクトリ名やファイル名変更 - ゆずめも](https://yuzu441.hateblo.jp/entry/2013/12/27/151233)
- [Windowsでgit mvしたらPermission denied - Qiita](https://qiita.com/ponsuke0531/items/a520386b69e169b98347)

# インストールしたい
- [SourceTreeの使い方を紹介しているサイト集 - Qiita](https://qiita.com/ponsuke0531/items/bba6a8c87317578f8018)
- [CentOSにGit GUIとGitkをインストールする方法 - Qiita](https://qiita.com/ponsuke0531/items/5b431cde8ef10df5008f)
- [Gitをインストールする方法 - Qiita](https://qiita.com/ponsuke0531/items/0e4007939a7b4452a9c8)

# GitHub
- GitHubで使える絵文字の一覧[🎁 Emoji cheat sheet for GitHub, Basecamp, Slack & more](https://www.webfx.com/tools/emoji-cheat-sheet/)
- [2段階認証を設定している場合にgitコマンドを使うにはPersonal asccess toensを取得する - Qiita](https://qiita.com/n_morioka/items/650d2950f527d594a00f)
- [GitHubのリポジトリ名変更方法 - Qiita](https://qiita.com/hisurga/items/583e8dbe4970bc8c25c8)
- [パブリックリポジトリをプライベートリポジトリに変更する方法 - Reasonable Code](https://reasonable-code.com/public-to-private/)
- [GitHubで誤って違うブランチにマージしてしまった時にWeb上だけで戻す方法 - Qiita](https://qiita.com/ponsuke0531/items/5e15f74f9d5dfca4e7b2)
- [複数人使うサーバでパスワードなしでGitHubを使う方法 - Qiita](https://qiita.com/ponsuke0531/items/0060a38b9d93b7315b65)
- [SVNをGitに移行するときにsvn.authorsfileに設定するファイルを作る方法 - Qiita](https://qiita.com/ponsuke0531/items/0a672cb9d0b63924d4d7)
- [他のGitからGitHubへ移行する方法 - Qiita](https://qiita.com/ponsuke0531/items/43464e8c8515c56a2cc7)
- [SubversionからGitHubへgit-svnへ移行する方法 - Qiita](https://qiita.com/ponsuke0531/items/7eebc29d6edbd658e1b4)
- 困った
    - [fatal: repository 'git@github.com/hoge/fuga.git' does not exist - Qiita](https://qiita.com/ponsuke0531/items/4d947f24d305048d8ff1)
    - [remote: Repository not found.](https://qiita.com/ponsuke0531/items/4fe191b7bed03342cff2)
    - [push declined due to email privacy restrictions - Qiita](https://qiita.com/ponsuke0531/items/5f341f39c17b15ec0180)

# 困った
- [上流ブランチがなくてエラーになった時の対応方法 - Qiita](https://qiita.com/ponsuke0531/items/410735b544795506fdc5)
- [Gitでブランチを削除しようとして怒られた時の対応方法 - Qiita](http://qiita.com/ponsuke0531/items/7835eaf129f212a6c8e9)
- [ブランチがdetached fromになってしまった時の失敗した対応方法 - Qiita](https://qiita.com/ponsuke0531/items/3c0357ef9dad0715bcc8)
- [認証情報に記号があるときのproxy設定ではURLエンコードしてgitconfigに書く - Qiita](https://qiita.com/nshinya/items/08db9be2c5255c91e6a0)
    - [URLエンコードしてくれるWebツール](https://tech-unlimited.com/urlencode.html)
- [cygwin_exception::open_stackdumpfile: Dumping stack trace to perl.exe.stackdump - Qiita](https://qiita.com/ponsuke0531/items/5e97a0c3ead318c447fa)
- [Encountered 2 file(s) that should have been pointers - Qiita](https://qiita.com/ponsuke0531/items/9fab364f429a648b9d49)
- [to set your account's default identity. - Qiita](https://qiita.com/ponsuke0531/items/f7c5b8dd9a9ae6ad0a25)
- [__git_ps1: command not found - Qiita](https://qiita.com/ponsuke0531/items/55dcf5ed15f442ec96cf)
- [error: Your local changes to the following files would be overwritten by checkout:](https://qiita.com/ponsuke0531/items/742bc6f91e6c247100e9)
- [error: You have not concluded your merge - Qiita](https://qiita.com/ponsuke0531/items/23be5ab56bba331323de)
- [error: the following files have local modifications: - Qiita](https://qiita.com/ponsuke0531/items/5a9692b103cc44198046)
- [warning: Pulling without specifying how to reconcile divergent branches is discouraged. - Qiita](https://qiita.com/ponsuke0531/items/0ffb201b9df83fa53f80)
- [fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree. - Qiita](https://qiita.com/ponsuke0531/items/fc9f2d753a8c1b927a25)
- [fatal: refusing to merge unrelated histories - Qiita](https://qiita.com/ponsuke0531/items/7138c3ddb8798b5e678d)
- [fatal: ambiguous argument 'HEAD^': unknown revision or path not in the working tree. - Qiita](https://qiita.com/ponsuke0531/items/3fd778ee33e074ed9b63)