- リポジトリ作成
$ git init
- status
- ワークツリーとインデックスの確認
- addしたファイルや、競合したファイルなどを確認できる
$ git status
- ワークツリーとインデックスの確認
- add
$ git add <ファイル名>- ファイルをインデックスする
- log
- リポジトリの変更履歴の確認
- 使い方
$ git log- グラフとして表示
$ git log --graph --oneline
- 全ブランチの状態を表示
--all$ git log --graph --all --oneline
- リモートリポジトリの登録
remoteコマンド$ git remote add <name> <url>
- origin
- リポジトリの場所(URL)の別名
- master
- ブランチ名
- デフォルトのマスター
$ git commit -m "<コメント>"
- コミット前のファイルが残った状態で、他のブランチにチェックアウトしたい時、コミット前のファイルを退避させることができる場所
- https://qiita.com/akasakas/items/768c0b563b96f8a9be9d
- stashする
$ git stash
- 一覧表示
$ git stash list
- スタッシュを適応し、適応したスタッシュを削除
$ git stash pop$ git stash pop stash@{N}# N番目のスタッシュを対象
- commitの位置
- 現在位置
HEAD
- 親(1個前)
HEAD~1orHEAD^
- 親の親(2個前)
HEAD~2orHEAD~1^1
- 親の派生
HEAD~1^2
- 2個前
HEAD~~
- reset
- 不要なコミットを捨てられる
- 使い方
$ git reset --<mode> <head_name>
- mode
- soft
- index change: No
- work tree change: No
- use case
- 変更したインデックスを元に戻す
- mixed
- index change: Yes
- work tree change: No
- use case
- 最近のコミットを完全になかったことにする
- hard
- index change: Yes
- work tree change: Yes
- use case
- コミットだけを無かったことにする
- soft
- revert
- コミットのログを残したまま、コミットを打ち消せる
- 使い方
$ git revert <branch_name>
- cherry-pick
- コミットの抜き取り
- 別のブランチからコミットをコピーして、現在のブランチに組み込める
- rebase
-i- コミットの履歴書き換え
- rebase前のコミットは
ORIG_HEADという名前で残ってる。- rebase後で戻した楽なったら、
$ gir reset --hard ORIG_HEADで戻れる
- rebase後で戻した楽なったら、
- use case
- push前にコミットコメントを綺麗にする
- 意味的に同じ内容のコミットを1つにまとめる
- コミット漏れしたファイルを後から追加
- 例
- HEADからHEAD~~までのコミットを1つにまとめる
$ git rebase -i HEAD~~- コメント修正
$ git add <change_texts>$ git commit --amend- コメント修正
$ git rebase --continue
- HEADからHEAD~~までのコミットを1つにまとめる
--ammend- 使い方
$ git commit --amend- エディタが開ので保存して終了
- エディタが開かなかったら、
.gitconfigを修正
- エディタが開かなかったら、
- 使い方
- Push
- 「ローカルリポジトリ → リモートリポジトリ」に変更履歴を共有
$ git push <repository> <refspec>...-u- 次回以降リポジトリ名が省略できる
- Pull
- 「リモートリポジトリ → ローカルリポジトリ」に変更履歴を共有
$ git pull <repository> <refspec>...pull --rebase- https://kray.jp/blog/git-pull-rebase/
$ git pull --rebase <repository> <branch_name>- マージコミットが作られない
- 履歴が綺麗になる
- Clone
- リポジトリの複製
- リポジトリ内の更新情報でconflictした時に差分調整を行う作業のこと
- 使い方
$ git merge <branch_name>- 競合が発生した時
$ git statusで状態確認- ファイル修正、
addしてcommitしてmerge
- 取り消し
- 1つ前のマージを取り消す
$ git reset --hard HEAD~
- 競合箇所が発生したら
- 競合箇所修正
$ git add <競合箇所>$ git rebase --continue
- 1つ前のマージを取り消す
- ブランチ上のコミットを1つにまとめてマージ
$ git merge --squash <branch_name>
- 基本2種類
- merge
- 別ブランチで修正箇所の競合が起きた時に、1つにまとめること
- メリット
- 変更内容の履歴がそのまま残る
- デメリット
- 履歴が複雑になる
non fast-foward- 複数ブランチの情報がそのまま残った状態でのmerge
- 正直まだよくわからない
- rebase
- 複数ブランチで同一箇所を修正して競合が起きた際、ブランチ毎マージする
- メリット
- 履歴が1本化されて単純になる
- デメリット
- 元のコミットの変更内容が変更される。元のコミットが動かなくなることがある
- merge
- GitHub Web上で行える3種類の方法
- Create a merge commit
$ git merge --no-ffのような動作- メリット
- 何をマージしたか記録が残る
- マージ前のブランチがそのまま残るので変更を細かく終える
- ブランチBが消えても、ブランチAに履歴が残る
- デメリット
- ログが複雑になる
$ git rebaseで戻る時に注意が必要
- Rebase and merge
- メリット
- 履歴が一本化される
- デメリット
- mergeできてもrebaseできないため、実行できないことがある
- メリット
- Squash and merge
$ git merge --squashと同じ動作- メリット
- ブランチBの作業がひとまとめにされて、ブランチAにコミットされる
- デメリット
- まとめる前のコミットに戻れない
- Create a merge commit
- 枝
- 使い方
- 作成方法
$ git branch <ブランチ名>
- 見方
$ git branch
- 切り替え
$ git checkout <ブランチ名>
- 作成+切り替え
$ git checkout -b <ブランチ名>
- merge
$ git merge <commit or branch_name>
- 削除
$ git branch -d <branch_name>
- 作成方法
- リモートリポジトリの最新の履歴の取得だけを行う
- 使用タイミング
- pullと違い、リモートリポジトリの内容のマージを行って欲しくない時
- 軽量タグ
- 名前を付けられる
- 注釈付きタグ
- 名前・コメント・署名を付けられる
- 使い方
- 作成方法
- 軽量タグ
$ git tag <tagname>
- 注釈付きタグ
$ git tag -a <tagname>$ git tag -am "<comment> <tagname>"
- 軽量タグ
- 確認の仕方
- 簡単に確認
$ git tag -n
- 細かく確認
$ git log --decorate
- 簡単に確認
- 削除
$ git tag -d <tagname>
- 作成方法
- 差分表示
- ブランチ間の差分表示
$ git diff <branch_name> <branch_name>
- ブランチ間の差分表示
- Forkしない方法(リポジトリ共有式)
- GitHubで
repository作成 - ローカルでPR用ブランチ作成して
push - GitHub上で
Pull Request - GitHub上で
Pull Requestをmerge
- GitHubで
- Forkする方法
- オリジナルリポジトリを自分のアカウントに
fork - ローカルに
clone cloneにcommitforkしたrepositoryからPull Request
- オリジナルリポジトリを自分のアカウントに