introduction-to-git part4
introduction-to-git/04_more_commits.md at master · Shinpeim/introduction-to-git · GitHub
git rm == ファイルの削除という変更をステージすること
じつは、ファイルの削除という変更を stage するためには、git add ではなく、git rm を使わないとダメなのです。
作業ディレクトリにファイルが存在するときにはそのファイルを削除する
ファイル削除 + git rm をしなくても、git rm するだけで削除変更はステージできる!
git mv == git add & git rm
renameを1コマンドでできる!
git reset
git reset についてもまとめてみる - murankの日記
git reset とは?
HEAD の位置を変更するコマンド。 オプションによってインデックス、ワーキングツリーの内容も変更できる。
- --soft
- HEAD の位置のみを変更する。インデックス、ワーキングツリーには影響なし。
- --mixed(もしくはオプションなし)
- HEAD の位置とインデックスを変更する
- --hard
- HEADの位置、インデックス、ワーキングツリーをすべて変更する。
--soft
git reset HEAD^ --soft
- インデックス、作業ツリーに対する変更は両者とも残る
- HEADの位置がHEAD^に変わるだけ
--mixed(オプション無し)
git reset HEAD
- インデクッスをHEADの状態にする。インデックスになにかあったらその変更は消える
- git add の取り消しに使う
- 作業ツリーへの変更は残る!
--hard
git reset --hard HEAD
- HEAD、インデックス、ワーキングツリーすべてを HEAD に変更する。
git checkout
git checkout <commit> <file>
fileが、指定した commit に含まれそのファイルの完全なコピーとなり、さらにそれをステージングエリアに追加します。
git checkout <commit>
作業ディレクトリ内のすべてのファイルを指定したコミットと同一の状態に更新するコマンド
git checout -- file
ファイル名とブランチ名がたまたま重複してしまった場合に誤動作してしまう危険性があります。その曖昧さを無くすための指定が「--」ということらしいです。
git reset, git checkoutなどファイルへの変更を戻す系メモ
ステージしたファイルの取り消し
- 指定したファイルのステージを解除する(=> 作業ディレクトリへ)
git reset HEAD file_name
ファイルへの変更の取り消し
- たとえば上記でunstageした内容そのものが間違いであった場合に作業ディレクトリ上からもその変更を取り除きたい場合に使用する
- まぁごちゃごちゃ書いたが、要は作業ディレクトリにある変更をなかったことにする
git checkout -- file_name
入門Git 第6章
Gitのログを調べる
git log -p
- 差分も一緒にログと表示してくれる
リビジョンの範囲指定
git log —since=“5 hours”
- ここ5時間のコミットだけをみる
git log —before=“5 horus"
- 5時間以前のコミットのみを表示する
- “2015-01-01”や、”1 minute”のような指定も可能
git log revision1..revision10
- revision2からrevision10を表示する(revision1は表示されない)
git log revision1..HEAD
- revision10が最新のリビジョン出会った場合↑と同義
- HEADは省略可
^(キャット)
- マイナス1の意味。
- 9a234643d34^ は9a234643d34の前にあるリビジョンを指す
- 9a234643d34^^は2つ前のリビジョン
- ~N
- 9a234643d34~2は9a234643d34から2つ前のリビジョン
誰のしわざか
git blame file_name
- ファイルの行ごとに誰がコミットしたのかがわかる
git blame -L 12,13 hello.html
- hello.html 12,13行目の情報のみを表示
- -L 12, +2のようにしても上記と同じ指定が可能(マイナスを使用することもできる)
git blame -L "/<\/body>/",+2 hello.html
- 正規表現で指定もできる
自分の準備の整ったものだけを共有することは、完全な分散型開発の真価のひとつ
コミットを修正する
git commit -C HEAD —amend
- -Cは新しいログメッセージを渡す代わりに指定したコミットのログメッセージを使うということ
- この例ではコミットの指定はHEADにしているが、なんでもいい
コミットを取り消す
git revert -n HEAD
- -n を使用することですぐにコミットしないでステージして状態で待ってくれる
変更をリセットする
git reset
- リポジトリを好きな状態にリセットできる
- パラメータを指定しないと、HEADが指定されたとみなされる
- —soft
- 以前のコミットをすべてステージングエイラに戻してコミットされていない状態に戻す
- —hard
- リポジトリ及び作業ツリーからコミットを消し去る
git reset --hard HEAD^
- 上記までを踏まえた具体例
- HEADの手前のコミットへリセットされる。リポジトリにもないし、どこにもコミットはなくなる
履歴を書き換える
履歴の書き換えが有益なケース
入門Git 第5章
Gitの真髄は、あらゆるものがブランチのように扱われること
git branch -m master mymaster
- -mは名前変更(move)の意味
ブランチはそのブランチでなされた最新のコミットだけを記録している
- それぞれのコミットは直前のコミット(親コミット)へのリンクを持っているのでそれをたどることでブランチを作ってからどんな変更があったのかがわかる仕組み
いつブランチを作るべきかを見極める
新しいブランチをつくる
check out 「出発する、出て行く」
http://ejje.weblio.jp/content/check+out
git checkout -b <新ブランチ名> <分岐元ブランチ名>
- -bを用いることでブランチ作成・チェックアウトを一発でできる
ブランチ間での変更のマージ
やり方は3つある
- 直接マージ
- あるブランチと別なブランチの履歴をマージして一緒にする
- あるブランチの履歴全体を別のブランチへ取り込みたい場合に使う
- 圧縮コミット
- あるブランチの変更を「圧縮」(squash)してそれを別なブランチの先頭にコミットする
- 新機能やバグフィックスなど機能をつくり、その変更を圧縮コミットとして一つのまとまった変更として取り込むときに使う
- 履歴がひとつになってしまうので、軽率に行うことは避けるべき
- git merge —squash branch_name
- 指定ブランチの変更をまとめてステージした状態にする(mergeと言いながら、commitはされていない!)
- チェリーピック
- 別なブランチからコミットを一つとってきてそれを現在のブランチに適用する
- ブランチ間でひとつのコミットだけマージしたいときに任意のコミットのみをマージできる
- git cherry-pick -n commit-id
- マージしないでステージした状態までで止まってくれる。これにより、cherry-pickした内容を修正してからコミットできる
ブランチ名変更
git branch -m old_name new_name
- なお、同じ名前のブランチを
-m
しても作成できない - 強制的に上書き作成したいときは
-M
を使用する
- なお、同じ名前のブランチを