shuhelohelo’s blog

Xamarin.Forms多めです.

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オプションで指定する文字列を「含まない」行に絞る。(この例ではfeaturedevelopという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では作業ツリー(ワークツリー)という。

backlog.com

インデックスはコミット対象としてファイルやフォルダの情報が置かれるところ。 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ブランチ

ブランチの削除を取り消したい