Gitを復習する

プロジェクトでGitを使うことが多いですが、SVN育ちのためプル・プッシュ以外のGit操作がよく分かっていませんでした。

「こわいよ Git」状態だったので、Gitについて改めて復習しました。

Git復習に役立ったサイト

以下のサイトでGitを復習しました。

・Gitとは
サルでもわかるGit入門 〜バージョン管理を使いこなそう〜【プロジェクト管理ツールBacklog】

・ブランチ・マージ・リベースについて
こわくない Git

・リベースはやめた方がいい理由
なぜ git rebase をやめるべきか - Frasco

・ブランチ戦略
見えないチカラ: A successful Git branching model を翻訳しました

EclipseでのGit操作
Eclipse EGit の使い方(1/2) | hiromasa.another :o)

EclipseでのGit操作

今のプロジェクトでEGitを使っているので、EclipseでのGit操作を試してみました。(メモベースですみません。。)

マージ

  1. ブランチAからブランチBを作成
  2. ブランチBでファイルAを修正してコミット
  3. マージ
    • ブランチAで何もコミットしないで、ブランチBをマージ → Fast-Forwardでマージされる(マージコミットは作られない)
    • ブランチAでファイルBを修正してコミットし、ブランチBをマージ → Non Fast-Forwardでマージされる(マージコミットが作られる)
    • ブランチAでファイルAを修正してコミットし、ブランチBをマージ → 競合が発生するので、手動でマージする(マージコミットが作られる)

Eclipse EGit の使い方(2/2) | hiromasa.another :o)
ブランチからのマージ1
コンフリクトの解消

逆マージ

  1. ブランチAからブランチBを作成
  2. ブランチAでファイルAを修正してコミット
  3. ブランチBでファイルAを修正してコミット
  4. ブランチBでブランチAをマージ(逆マージ) → 競合が発生するので、手動でマージする(マージコミットが作られる)
  5. ブランチAでブランチBをマージ(再マージ) → Fast-Forwardでマージされる(マージコミットは作られない)

Git の疑問。トピックブランチで作業中に、master ブランチで重要な変更が加えられた。どうすればよい? - 彼女からは、おいちゃんと呼ばれています

プルリク競合

  1. 逆マージ → 競合が発生するので、手動でマージする(マージコミットが作られる)
  2. マージコミットをプッシュ

Git コンフリクト解消手順 - Qiita

軽微な競合であれば、GitHub上で直接修正するのもありです。
Resolving a merge conflict on GitHub - User Documentation

プル

  1. 別ユーザでファイルAを修正してコミット&プッシュ
  2. プル
    1. ローカルで何もコミットしないで、プル → Fast-Forwardでマージされる(マージコミットは作られない)
    2. ローカルでファイルBを修正してコミットし、プル → Non Fast-Forwardでマージされる(マージコミットが作られる)
    3. ローカルでファイルAを修正してコミットし、プル → 競合が発生するので、手動でマージする(マージコミットが作られる)
    4. ローカルでファイルAを修正してコミットしないで、プル → 競合が発生するので、未コミットファイルをスタッシュする

git pull を強制し、リモートでローカルを上書きする方法 | WWWクリエイターズ
git pull について、おさらい

EGit逆引きリファレンス(ブランチ操作関連) - Qiita
git stash
git stash apply

コミットの書き換え

直前のコミットを修正する

commit --amend

  1. Gitステージングビューで「コミット・メッセージ」の右横にある「修正(前のコミットを編集)」をクリック
  2. 「コミット・メッセージ」にコミットコメントが表示されるので、コメントを修正したい場合は修正
  3. コミットファイルを追加したい場合は対象ファイルをステージング
  4. コミットファイルを修正したい場合は対象ファイルを修正してステージング
  5. コミットボタン押下

過去のコミットを打ち消す

revert

  1. ヒストリービューから打ち消したいコミットを選択して右クリック
  2. 「コミットを戻す」をクリック

コミットを捨てる

reset

  1. ヒストリービューから戻りたいコミットを選択して右クリック
  2. リセット > ソフト or 混合 or ハード を選択

※消したいコミットではなく、戻りたいコミット(消したいコミットの1つ前のコミット)を指定すること

コミットを抜き取る

cherry-pick

  1. ヒストリービューで「すべてのブランチおよびタグを表示」をクリック
  2. チェリーピックしたいコミットを選択して右クリック
  3. 「チェリーピック」をクリック

コミットの履歴を書き換える

rebase -i

コミットコメントを修正する

  1. ヒストリービューから修正したいコミットの1つ前のコミットを選択して右クリック
  2. 「対話式リベース」をクリック
  3. 修正したいコミットを選択して「リワード」をクリック
  4. アクションが「REWORD」に変わったら「開始」をクリック
  5. コミットコメントを修正してOKボタン押下

コミットを修正する

  1. ヒストリービューから修正したいコミットの1つ前のコミットを選択して右クリック
  2. 「対話式リベース」をクリック
  3. 修正したいコミットを選択して「編集」をクリック
  4. アクションが「EDIT」に変わったら「開始」をクリック
  5. ファイルを修正して、索引に追加
  6. 必要であればコミットコメントを修正して、コミットボタン押下
  7. コミットが完了したら「継続」をクリック

複数のコミットを1つにまとめる

  1. ヒストリービューからまとめたいコミットを複数選択して右クリック
  2. 変更 > スカッシュを選択
  3. コミットコメントを入力してOKボタン押下

※キャンセルしてもスカッシュされてしまうので注意

ブランチ上のコミットを一つにまとめてマージする

merge --squash

  1. 対象プロジェクトを右クリック
  2. チーム > マージを選択
  3. マージするブランチを指定し、「マージ・オプション」で「スカッシュ」を選択し、マージボタン押下
  4. マージ対象ファイルがステージングされるので、「コミット・メッセージ」を入力して、コミットボタン押下

直前のコミットを修正する【コミットの書き換え】 | サルでもわかるGit入門【プロジェクト管理ツールBacklog】

EGit逆引きリファレンス(コミット関連) - Qiita

EGit逆引きリファレンス(ブランチ操作関連) - Qiita