- Git rebase
- リベースする前に
- 通常のリベース
- 対話型リベース
- Force-push
- マージ競合
このガイドは、リベースを開始するのに役立ちます。プッシュして固定しているのですが、
このドキュメントに入る前に、コマンドラインを介してgitを使用することに精通していることを確認してください。
Git rebase
リベースは非常に一般的な操作です。, 次のリベースオプションがあります。
- 通常のリベース。
- インタラクティブリベース。
リベースする前に
git rebase
コミット履歴を書き換えます。 それを行うことは有害である可能性があります共有された枝。 マージの競合を解決するのが複雑で困難な場合があります。 これらのケースでは、デフォルトのブランチに対してブランチをリベースする代わりに、代わりにプルすることを検討してください(git pull origin master
)。 それはあなたの貢献者の仕事を損なうことなく、同様の効果を持っています。,変更を失わないようにするために、リベースする前にブランチをバックアップする方が安全です。 たとえば、my-feature-branch
と呼ばれる機能ブランチを考えます。
-
端末で機能ブランチを開きます。
git checkout my-feature-branch
そこから新しいブランチをチェックアウトします。
git checkout -b my-feature-branch-backup
元のブランチに戻ります。
git checkout my-feature-branch
これで、安全にリベースできます。, 何か問題が発生した場合は、
my-feature-branch
をmy-feature-branch-backup
に対してリセットすることで変更を回復できます。バックアップブランチの作成後に
my-feature-branch
に変更を追加した場合、リセット時にそれらが失われることに注意してください。通常のリベース
通常のリベースを使用すると、defaultbranch(または他のブランチ)で機能ブランチを更新できます。これはGitベースの開発戦略にとって重要なステップです。, コードベースに追加している変更が、featurebranchを作成した後にターゲットブランチに追加された既存の変更を壊さないようにすることができます。,
For example, to update your branch
my-feature-branch
withmaster
:-
Fetch the latest changes from
master
:git fetch origin master
-
Checkout your feature branch:
git checkout my-feature-branch
-
Rebase it against
master
:git rebase origin/master
-
Force-push to your branch.,
リベースするとき:
- Gitは、
master
に送信されたすべてのコミットをインポートします。 - Gitは、機能ブランチにあるコミットをすべての上に置きます
master
:
master
リベースしたい他のブランチに置き換えることができます。例えば、release-10-3
。, また、origin
を他のremoterepositories(たとえば、upstream
)に置き換えることもできます。 Localrepositoryにリンクされているリモートを確認するには、git remote -v
実行できます。マージの競合がある場合、Gitはリベースを続行する前にそれらを修正するように求めます。
詳細については、gitのrebasingとrebasing戦略に関するドキュメントを確認してください。
Interactive rebase
interactive rebaseを使用してコミットを変更できます。 たとえば、commitmessageを修正する、スカッシュ(複数のコミットを一つに結合する)、edit、またはdeletecommits。, リベースを使用して、過去のコミットメッセージを変更し、ブランチのコミット履歴を整理してきれいに保ちます。
注デフォルトのブランチコミット履歴をきれいに保ちたい場合は、すべてのマージ要求をマージする前に、すべてのコミットを定期的にスカッシュする必要はありません。SquashとMergeでは、GitLabは自動的にそれを行います。最近のコミットで何かを変更したい場合は、rebaseコマンドにフラグ--interactive
(または-i
)を渡してinteractiverebaseを使用します。,たとえば、ブランチ内の最後の三つのコミット(
HEAD~3
)を編集する場合は、次のように実行します。git rebase -i HEAD~3
Gitは、ターミナルテキストエディタで最後の三つのコミットを開き、使用できるすべての対話型リベースオプションを記述します。 デフォルトのオプションは
pick
で、コミットは変更されません。 各コミットで実行する操作に応じて、キーワードpick
を置き換えます。 これを行うには、端末のテキストエディタでコミットを編集する必要があります。,たとえば、macOSの
ZSH
シェルでVimをテキストエディタとして使用していて、三つのコミットをすべてスカッシュ(一つに結合)したい場合:- キーボードを押してVimの編集モードに切り替えます。
- キーボードの矢印でナビゲートして、
pick
からsquash
(またはs
)にコミットキーワードを編集します。 第三のコミットに同じことを行います。最初のコミットは変更されないままにする必要があります(pick
)私たちは最初に第二と第三をスカッシュしたいとして。, - Escキーを押して編集モードを終了します。
- タイプ
:wq
“書き込み”(保存)と”終了”にします。 - Gitはコミットメッセージを出力するので、編集する機会があります。
#
で始まるすべての行は無視され、commitmessageに含まれません。 他はすべて含まれています。li>- そのままにするには、
:wq
と入力します。 コミットメッセージを編集するには:編集モードに切り替え、コミットメッセージを編集し、先ほどと同じように保存します。,
- リベースする前にコミットをリモートブランチにプッシュしていない場合は、変更を正常にプッシュします。 またこれらの犯て、力押します。
コマンドラインを使用して編集する手順は、オペレーティングシステムと使用しているシェルによって少し異なることに注意してください。
インタラクティブなリベースをより深く見るために、Gitの多数の元に戻す可能性を参照してください。,
Force-push
スカッシュコミット、ブランチのリセット、またはブランチのリセットなど、より複雑な操作を実行する場合は、リモートブランチへの更新を強制する必要があります。これらの操作は、コミット履歴の書き換えを意味します。branch.To 更新を強制し、フラグを渡します
--force
または-f
にpush
コマンド。 例:git push --force origin my-feature-branch
共有ブランチで作業しているときに更新を強制することはお勧めしません。
代わりに、フラグ
--force-with-lease
を渡すこともできます。, より多くのコミットが他の誰かによってリモートブランチに追加された場合、remotebranch上の作業を上書きしないので、より安全です。git push --force-with-lease origin my-feature-branch
強制プッシュしたいブランチが保護されている場合、最初に保護を解除しない限り、強制プッシュすることはできません。 その後、強制的にプッシュして再保護することができます。,
Merge conflicts
Gitはfileline-by-lineのバージョンを比較することに基づいているため、ブランチで変更された行がターゲットブランチで変更された同じラインと一致するたびに(そこからfeatureブランチを作成した瞬間)、Gitidentifiesこれらの変更はマージ競合として認識されます。 それを修正するには、あなたが選ぶ必要がありますあなたが保持したいその行のどのバージョン。
ほとんどの競合はGitLab UIを介して解決できます。
より複雑なケースでは、それらを解決するためのさまざまな方法があります。 違いを視覚化することで助けることができるGit GUIアプリもあります。,たとえば、
my-feature-branch
:git checkout my-feature-branch
ターゲットブランチに対してブランチをリベースして、競合をGitpromptsします。
-
ターゲットブランチに対してブランチをリベースします。
-
ターゲットブランチに対してブランチをリベースします。
-
ターゲットブランチに対して競合を修正するには、次の方法を使用します。
-
ターゲットブランチ
git rebase origin/master
- 競合するファイルを好みのコードエディタで開きます。
- 競合ブロックを探します。
- マーカーで始まります。
<<<<<<< HEAD
。, - 以下に、変更内容があります。
- マーカー:
=======
変更の終了を示します。 - 以下に、ターゲットブランチの最新の変更内容があります。
- マーカー
>>>>>>>
は、競合の終了を示します。
- マーカーで始まります。
- ファイルを編集します:tokeepしたいバージョン(
=======
の前または後)を選択し、ファイル内の不要なコンテンツの部分を削除します。 - マーカーを削除します。
- ファイルを保存します。,
- 他の競合するファイルがある場合は、このプロセスを繰り返します。
-
変更をステージングします。
git add .
-
変更をコミットします。
git commit -m "Fix merge conflicts"
-
リベースを続行します。
git rebase --continue
注意ここまでは、git rebase --abort
を実行してプロセスを停止できます。Gitはリベースを中止し、git rebase
を実行する前の状態にブランチをロールバックします。,実行した後git rebase --continue
リベースを中止することはできません。- リモートブランチに強制的にプッシュします。
-
-
-
Leave a Reply