GITのわかりにくいところまとめてみた
背景
gitのコマンドがいまだにしっかり使いきれていない気が。。
整理とアウトプット用に個人的に理解が怪しいところを備忘録的にまとめてみました。
git add/push/commit
- add:資産をローカルのステージング上にアップ
- commit:addした資産がローカルリポジトリに反映される
- push:commitした資産をリモートリポジトリに反映する
各種コマンドを取り消す方法
git commit を取り消す
git reset --soft HEAD
git resetで直前のcommitを取り消すことができる
--soft
:オプション。
git add を取り消す
git reset HEAD
直前のaddを取り消すことができる
各種コマンド解説
HEAD
自分が作業している場所を示すポインタ
HEAD^は「一つ前のコミット」を表す。
reset
特定の時点までファイルを巻き戻せる。
--soft
HEADの位置のみ巻き戻す
Ex:git reset --soft HEAD^
:直前のコミットを消す
--mixed
HEADの位置、インデックスを巻き戻す
オプションなしでも同じ結果になる
例:git reset HEAD→インデックスの変更(addしたもの)を消す
--hard
HEADの位置、インデックス、作業ディレクトリを巻き戻す
Ex:git reset --hard HEAD^
:直前のコミットまですべて消す
-f
特定の操作を強制的に実行する。
使用は慎重に。。
git fetch/pull
-
fetch : リモートの資産を引っ張ってくる。マージはなし。
-
pull : リモートの資産を引っ張ってくる。マージあり。
違いはマージまでするか否か。
rebase
指定コミットを作り直して、ログをキレイにできる。
マージとの違い
-
マージ:過去のコミットを全て一つの新しいコミットとして、マージ先にマージされる。
-
リベース:マージ先のブランチの最新コミットにへリベース分のコミットが移動する(過去コミット履歴を含めた状態で)
コミットされたすべての変更を指定先のブランチでも再現できる点でマージとの差別化が可能。
履歴が直線的になるため、ログがきれいなまま保つことができる。
git revert
特定のコミットの変更を取り消す新しいコミットを作成する。
使用シチュエーション
過去の特定のコミットの変更を取り消したいが、その取り消し自体の履歴も残したい場合。
git resetとの使い分け
リモートのコミットを取り消したい場合は、revertのみしか使用不可。
resetではリモート分は消すことができない。
git remote add origin の origin について
origin とは何か?
リモートリポジトリに対するデフォルトの名前(エイリアス)。ローカルのGitリポジトリが、どのリモートリポジトリと連携しているかを示す。
一般的に、GitHubや他のリモートリポジトリサービスからプロジェクトをクローン(git clone)すると、そのリモートリポジトリは自動的に origin という名前で登録される。
資産(リポジトリ)ごとに origin が存在する
各リポジトリごとにリモートリポジトリが設定されており、そのデフォルトのエイリアスとして origin が使用される。
各ローカルリポジトリはそれぞれ異なる origin を持つことができる。異なるリポジトリに対して異なる origin が設定され、それぞれ異なるリモートリポジトリと連携される。
複数のリモートリポジトリを追加可能
1つのリポジトリには、origin 以外にも複数のリモートリポジトリを設定できる。これにより、例えばプライベートなリモートと公開されているリモートの両方にプッシュすることが可能になる。
感想
普段gitGraphを使用、中で実際どのようなコマンドが走っているか理解が足りていなかったと改めて痛感しました。。
Discussion