0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gitの「分岐状態」について

  • 「分岐状態」とは、ローカルブランチとリモートブランチが異なり、両者の履歴が完全に一致していない状況を指す
    例えば:
    • ローカルでコミットを追加した
    • リモートリポジトリに別の人がコミットを追加し、その内容がローカルにまだ反映されていない

この場合、Gitはどのように両者を統合するべきかを決定することができない


解決方法の設定

Gitは3つの方法でこの状況を解決する設定を提供している
ヒントメッセージに記載された以下の方法を選択可能;

  1. merge(マージ方式)

    git config pull.rebase false  # マージ
    

    この方法を選ぶと、ローカルブランチの内容とリモートブランチの内容をマージする
    コミット履歴に「マージコミット」が生成される(分岐状態が解決された記録が残る)

  2. rebase(リベース方式)

    git config pull.rebase true   # リベース
    
    • この方法ではリモートブランチの履歴の後ろにローカルブランチの変更を適用する
    • 履歴を「平らにする」方法で、コミット履歴がきれいに保たれるメリットがあるが、複雑な状況では競合が発生する可能性もある
  3. fast-forward only(早送り方式)

    git config pull.ff only       # ファストフォワードのみ
    
    • この方法を選ぶと、ローカルブランチがリモートブランチに追いつける場合だけ変更を取り込める
    • もし分岐が発生している場合はエラーになる、、
    • この方法は慎重な統合を目指す場合に使用される

一回限りの解決方法

設定を毎回変更するのが面倒な場合、一時的にコマンドラインでオプションを指定することも可能

  • マージする場合

    git pull --no-rebase origin main
    
  • リベースする場合

    git pull --rebase origin main
    
  • ファストフォワードのみの場合

    git pull --ff-only origin main
    

推奨設定

以下は一般的な選択肢;

  • チームで作業していて履歴の正確さよりも簡単に管理することを優先する場合、git config pull.rebase false(マージ方式)が無難
  • 履歴をきれいに保ちたい場合、git config pull.rebase true(リベース方式)が推奨

もし常に一貫した設定にしたい場合は、グローバル設定として以下を設定する:

git config --global pull.rebase true   # 常にリベース

または、

git config --global pull.rebase false  # 常にマージ
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?