Git の使い方の備忘録
下記動画が表示されていない場合は、何回かリロードを行ってください。
通常の add, commit
ファイルなどを一時保管で記憶(ステージエリア)し、git 管理エリアでバージョン管理(commit)をします。
コミットの修正、取り消し(amend)
コミットの取り消し(reset Hard)
別ブランチのコミットを拾ってきてマージ(cherry-pick)
※ 動画内 chery-pick → cherry-pick の間違いです。
異なるリポジトリのコミットを拾ってきてマージする方法
コマンドラインから下記コマンドを叩く
(修正を導入したいリポジトリ内で) git remote add Hoge_REPO {すでに修正を導入したリポジトリのURL} git fetch Hoge_REPO git cherry-pick {Hoge_REPO上のコミットのSHA1} git push origin master git remote rm Hoge_REPO
ブランチの改変(コミットの修正)(rebase)
※ リモート上に同期してしまった場合はこちらのコマンドではなく revert
を利用するのが良いだろう。他の人が混乱してしまわないように。
SourceTree(GUI)で Rebase をする場合は、画面左から対象のブランチを選択し右クリック。「Rebase current branch onto xxx」を選択する。
確認ダイアログが表示される。良い場合は、ok をクリック。
ログの更新方法
- 直前のコミットを変更したい場合は? amend オプションを利用する
- 直前よりも前のコミットを変更したい場合は? rebase のインタラクティブモードを利用する
git rebase -i xxxxxx
-i
はインタラクティブモードでrebase
を実行しますよという意味。xxxxxx
は現在の位置からxxxxxx
までの範囲のコミットまでという意味。xxxxxx
はハッシュ値を指定すること。 コマンドを実行すると git log(新しいものから表示される)とは反対の画面表示となる(古いものから表示される。comitti 操作を行った順で上から表示されるということ。)pick
と記述されているのは、「このコミットは保留、変更はしない」という意味。pick
をreword
に変更すると、「コミットメッセージを変更する」という意味になる。GUI (SourceTree)でコミットメッセージを変更する場合は?
- 変更したい範囲を指定
- 指定したコミット上で右クリック
- 「Rebase Children of SHA-1 interactivly…」を選択
- 変更したいコミットメッセージが見つかったら右クリック
- 「Edit message…」を選択
- 内容を編集し、ok
- Rebase でコミットを編集できる。
- いくつかのコミットを一つにまとめたい場合は? こちらも
-i
のrebase
を利用して行うことができる。 インタラクティブモードを実行すると一覧が表示されるのでそこでsquash
(濃縮) コマンドを使う。squash
はこのコマンドを利用したその前のコミットとまとめることになる。squash
後のコミットメッセージを変更することができる。GUI でコミットをまとめるには?
- コミットログ内で該当のコミット上で右クリック
- 「Rebase Children of SHA-1 interactively…」
- インタラクティブモードを起動
- まとめるコミット上で右クリック
- 「Squash with previous commit…」を選択
- ok.戻る時は Cmd+Z(win: Ctrl+Z)で元の状態に戻せる。
- 一つのコミットを分割したい場合は? こちらもインタラクティブモードを利用する。 エディタが表示されたら今度は
edit
をpick
の代わりにつける。git reset HEAD^
でコミットを取り消しgit add *****
git commit -m "コミットメッセージ"
- 分割されているファイルをそれぞれ
add & commit
を行う git rebase --continue
で終了。 コミットログを見ると分割されていることがわかる。
GUI でコミットを分割するには?
- インタラクティブモードを起動
- 分割したいコミット上にチェックを入れる。
- 分割したいところで HEAD が止まるのだが GUI では操作ができないのでターミナルから後の操作は行うことになる。
add & commit
の操作を行う- GUI の機能選択から「Action」→「Continue Rebase」を選択
- 残りの Rebase 作業を行ってくれる(
git rebase --continue
と同様の操作)
- コミット間に新しいコミットを挿入したい こちらもインタラクティブモードで行うことができる。
pick grea567 add init pick jad7840 add test1 pick a2748bf add test2 pick bc895df add test4 pick da34bf7 add test5
上記のような状態で test2 と test4 の間に新しいコミットtest3
を挿入したいときは、以下のようにする。git log
とは表示が逆なので注意。 そして挿入するところ(作業を中断するところに注意)pick grea567 add init pick jad7840 add test1 edit a2748bf add test2. # <- こちらの pick を edit に変更 pick bc895df add test4 pick da34bf7 add test5
変更したらrebase
を実行しよう。add & commit
を行ってコミットを追加する。 最後にgit rebase --continue
を行う。GUI で新しいコミットを挿入するには?
- 分割する場合同様、挿入したいコミットにチェックをいれる
- ターミナルから操作を行う。
add & commit
- アクションメニューから「Action」→ 「Continue Rebase」選択
- 残りの rebase 作業を実行してくれる。
- コミットを削除または順序の調整をしたい場合は? インタラクティブモードを起動しエディタ上で編集するだけで ok.
GUI で順序の調整は?
- マウスでドラッグして順序を調整
- ok ボタンを押下で終了 削除する場合は、コマンドラインの場合はエディタで
drop
もしくは直接削除しても ok
GUI で削除は?
- Rebase 画面からコミット上で右クリック
- 「Delete commit…」を選択