Gitメモ:蓄積
fetchしてmerge
リモートリポジトリをfetchして、ローカルのブランチをリモート側に合わせる。
リモートのほうがcommitが進んでいる場合、まずはfetchでリモートリポジトリの情報を取得する。
git fetch
そしたら、mergeしたいブランチに移る。
今回はdevelop
。
git checkout develop
最後に今いるブランチ(develop)とリモートリポジトリのdevelopをmergeする。
つまり、
develop ← origin/develop
をやる。
これでローカルとリモートのdevelop
ブランチがそろった。
merge済みのブランチを削除する
git branch --merged
でmerge済みのブランチを標準出力。
grep -v
でその後ろで-e
オプションで指定する文字列を「含まない」行に絞る。(この例ではfeature
とdevelop
という2つの文字列を指定)
git branch --merged| grep -v -e feature -e develop | xargs -I % git branch -d %
% %
の意味を調べたいけれど、どう調べたらいいかわからない。
ファイル内の変更箇所を知りたい
git diff
ステージング(add)したファイルをアンステージしたい
git reset HEAD ファイル名
ファイルの変更をもとに戻したい
アンステージな状態でもなくしたい。
git checkout ファイル名
Commitを取り消したい
取り消すコミットの変更は保持したい。 ブランチは戻るけれど、取り消したブランチに含まれていた変更分はステージングとして残る。 コミットしていない変更分もそのまま。ステージングの状態は維持。
git reset --soft コミット
もうほんと消しさる。
git reset --hard コミット
じゃあ--mixってなんだ? 取り消したブランチに含まれていた変更分がアンステージとして残る。 コミットしていない変更分もアンステージになる。
git reset --mixed コミット
作業ツリー、インデックス、HEADとは
OS上で実際に作業しているファイルやフォルダのことをGitでは作業ツリー(ワークツリー)という。
インデックスはコミット対象としてファイルやフォルダの情報が置かれるところ。 addコマンドで追加される場所。インデックスにステージされる、というのか。
ブランチとは
コミットを指すポインタ。
枝全体を指すものではない。 ここらへんの感覚がいまいち。
じゃあCheckoutってのは特定のブランチを指すようにするって意味か。 checkoutでコミットを指定することも可能か。
detatched なhead
HEADがブランチ以外のコミットを指している状態
detatched headの作り方。
git checkout コミット番号(ただしいずれのブランチも指していない)
戻し方
git checkout ブランチ
git resetをなかったことにしたい
たとえreset --hardしちゃっても、reflogに残っているだと!?
reflogでコミットの履歴(?)をみることができる。 logとは違い、resetで消したコミットも表示される。 ので、resetをなかったことにできる。
git reflogで消す前のコミットを調べる。
//時間的に新しいほうから4つのブランチ git reflog -n 4
次に、そのコミットまでreset --hardすれば元通り。
git reset --hard コミット
git resetはブランチを超えて任意のコミットに行けるのか
いけるにきまってんだろ。
今いるコミットを別のコミットの後に付ける
git rebase コミットorブランチ