はじめに
孤独にアプリ開発をしてきたこの8年、ようやくチーム開発をすることになり、Gitを急遽勉強する必要が出てきたため、記事にしようと思いました。殴り書きベースになると思いますが、長い目で更新し、Gitチートシートにしていきたいと思ってます。
主なコマンド一覧
コマンド名 | 説明 |
---|---|
status | 現在のファイル更新状況を表示 |
commit | インデックスされたファイルをローカルリポジトリにコミットする |
branch | 現在のローカルブランチ一覧を表示する |
checkout | ファイルをチェックアウト、指定したブランチに移動 |
-b | ブランチを作成 |
-1 | ローカル/リモート ブランチ一覧を表示 |
--oneline | リモートブランチ一覧を表示 |
diff | ワーキングツリーとインデックスの差分を表示 |
--cached | インデックスとHEADの差分を表示 |
fetch | リモートリポジトリからデータを取得 |
--prune | リモートリポジトリのブランチの差分を整理する |
log | ローカル履歴を表示 |
--oneline | リモートリポジトリのアクション履歴一覧を表示 |
-p | logの詳細 |
--graph --decorate --pretty=oneline --abbrev-commit | 自分ツリー&リモートオリジンツリーを表示 |
--graph --decorate --pretty=oneline --abbrev-commit --all | 自分ツリー&他人のツリー&リモートオリジンツリーを表示 |
ls-files | git リポジトリのルートからのパスで表示 |
blame | blame ファイル名 でファイルの変更履歴を表示。 --abbrev=数値 で文字数を指定できる |
show
status + diff といったところか。
rebase
rebaseというコマンドは、様々な状況において使われるコマンドです。実践パターンが発生するごとに、随時追加していきたいと思います。
mv
Linuxのmv同様リネーム出来る、そのあとコミットは必要
逆に言えば、
手動でファイルを移動
git status
> git add
を短縮できるってことでもあるような。
rm
#ファイルも一緒に削除したいとき
$ git rm [削除したいファイル]
#ディレクトリごと削除
$ git rm -r [削除したいディレクトリ]
#ファイルを残したいとき(.gitignoreにも追記する)
$ git rm --cached [削除したいファイル]
コマンド後、リポジトリに反映するためにコミット。
ローカルファイルを削除してしまった、やり直したい場合
最新のコミット(HEAD)からチェックアウトする
$ git checkout HEAD ファイル名
HEAD
HEADの種類
- HEAD:現在チェックアウトされているブランチの最新コミット
- FEACH_HEAD: 最後に取得したリモートブランチの最新コミット
- ORIG_HEAD:元の状態を復元するためHEAD
- MERGE_HEAD:マージ中のコミットが記録されるHEAD
リポジトリ名変更
$ git br -m 元ブランチのパス 新ブランチのパス
//package.jsonに変更があった場合には
$ yarn
でライブラリをインストール
//git staで以前のバージョンに戻したい
$ git checkout ファイルパス
直前のコミットを上書きする
//push後、さらにソースを修正
$ git add 修正したソース
$ git ci --amend
$ git push --force origin ブランチ名
現在のリポジトリを、masterでリベースする
$ git fep
$ git checkout 書き換えたいブランチ
$ git rebase origin/master
//確認ができたら 強制プッシュ
$git push -f origin features/add-circle-ci-#18
コンフリクト系
(1)gitでブランチ切り替えようとしたらコンフリクト
$ git checkout [自分のbranch名]
エラー:
error: you need to resolve your current index first
$ git merge --abort
(2) git rebase 後に、元に戻す
エラー:
fatal: There is no merge to abort (MERGE_HEAD missing).
対応
$ git reflog
$ git reset --hard HEAD@{39}
$ git lola
無駄なコミットを削除する場合
$ git log --oneline
(ハッシュ1) (コメント1)
(ハッシュ2) (コメント2)
(ハッシュ3) (コメント3)
(省略)
//コメント1、2の履歴を削除する場合
$ git rebase -i (ハッシュ3)
pick (ハッシュ1) (コメント1)
pick (ハッシュ2) (コメント2)
↓変更
drop (ハッシュ1) (コメント1)
drop (ハッシュ2) (コメント2)
:wq
//プッシュでリモートリポジトリを書き換え
$ git push --force origin features/
現在のブランチを最新マスタでリベースする
$ git fep
$ git co features/add-circle-ci-#18
$ git rebase origin/master
rebase直前に戻る場合
$ git reset --hard ORIG_HEAD
cherry-pick
調査中
##その他
###オプション
commit
- a:git statusの追跡されてるコマンドを一括コミット。addを短縮できる
log
- p:ログの詳細
diff
HEAD:通常ワーキングツリーとインデックスの差分を出すdiffだが、これは、最新のコミットとツリーとの差分をだす
.gitignore
*~
*.swp
などんp記述も可能