git merge
およびgit rebase
コマンドへの究極のガイドへようこそ。 このチュートリア
Git Merge
git merge
コマンドは、別のブランチのコードベースに加えられた変更を新しいコミットとして現在のブランチにマージします。,
コマンド構文は次のとおりです。
git merge BRANCH-NAME
たとえば、現在dev
という名前のブランチで作業していて、new-features
という名前のブランチで行われた新しい変更をマージしたい場合は、次のコマンドを発行します。
iv id=”4c2c9df942″注:現在のブランチにコミットされていない変更がある場合、現在のブランチのすべての変更がコミットされるまで、gitはマージを許可しません。, これらの変更を処理するには、次のいずれかを実行できます。
新しいブランチを作成し、変更をコミットします。
git checkout -b new-branch-namegit add .git commit -m "<your commit message>"
それらを隠します。
git stash # add them to the stashgit merge new-features # do your mergegit stash pop # get the changes back into your working tree
すべての変更を放棄します。
git reset --hard # removes all pending changes
Git Rebase
Gitのブランチをリベースすることは、Gitのブランチをリベースすることです。分岐の全体をツリー内の別のポイントに移動する方法。 最も簡単な例は、ツリー内の枝をさらに上に移動することです。, ポイントAでマスターブランチから分岐したブランチがあるとします。
/o-----o---o--o-----o--------- branch--o-o--A--o---o---o---o----o--o-o-o--- master
リベースするときは、次のように移動できます。
/o-----o---o--o-----o------ branch--o-o--A--o---o---o---o----o--o-o-o master
リベースするには、マスターブランチのリベースに必要なすべてのコミットがあることを確認してください。 リベースしたいブランチをチェックアウトし、git rebase master
と入力します(masterはリベースしたいブランチです)。, たとえば、別のブランチ(機能と呼びましょう)に基づいていたブランチは、マスターにリベースされます。
/---o-o branch /---o-o-o-o---o--o------ feature----o--o-o-A----o---o--o-o-o--o--o- master
git rebase master branch
またはgit rebase master
ブランチをチェックアウトすると、
/---o-o-o-o---o--o------ feature----o--o-o-A----o---o--o-o-o--o--o- master \---o-o branch
コンソールでgit rebase interactive
git rebase
コミットのリストを使用するには、リベースで選択、編集、またはドロップできます。
git rebase -i HEAD~5
最後の番号は、レビューしたい最新の後方からの任意の数のコミットです。,vimでesc
を押し、次にi
を押してテストの編集を開始します。- 左側では、以下のコマンドのいずれかで
pick
を上書きすることができます。 コミットを前のコミットにスカッシュしてコミットメッセージを破棄する場合は、コミットのf
の代わりにpick
と入力します。 - テキストエディタを保存して終了します。
- rebaseが停止しているときは、必要な調整を行い、rebaseが成功するまで
git rebase --continue
を使用します。, - 正常にリベースされた場合は、
git push -f
で変更を強制的にプッシュして、リベースされたバージョンをリモートリポジトリに追加する必要があります。 - マージの競合がある場合、このガイドの提案に従うなど、これを修正する方法はいくつかあります。 一つの方法は、テキストエディタでファイルを開き、必要のないコードの部分を削除することです。 次に、
git add <file name>
の後にgit rebase --continue
を使用します。, 競合したコミットをスキップするには、git rebase --skip
を入力し、コンソールでgit rebase --abort
を実行してリベースを停止します。
マージの競合
マージの競合は、同じ行を競合する方法で変更する別々のブランチでコミットを行うときです。,
CONFLICT (content): Merge conflict in resumé.txt Automatic merge failed; fix conflicts and then commit the result.
コードエディタでresumé.txt
ファイルを見ると、競合が発生した場所がわかります。
<<<<<<< HEADAddress: 808 South Street=======Address: 505 North Street>>>>>>> updated_address
Gitはファイルにいくつかの行を追加しました。
<<<<<<< HEAD
=======
>>>>>>> updated_address
git merge vs git rebase
両方git merge
とgit rebase
非常に便利なコマンドであり、一方は他方よりも優れていません。, しかし、あなたとあなたのチームが考慮すべき二つのコマンドの間にいくつかの非常に重要な違いがあります。
git merge
が実行されるたびに、追加のマージコミットが作成されます。 ローカルリポジトリで作業しているときはいつでも、マージコミットが多すぎると、コミット履歴が混乱して見 マージコミットを回避する一つの方法は、代わりにgit rebase
を使用することです。
git rebase
非常に強力な機能です。 そうは言っても、それが正しい方法で使用されていない場合、それは危険でもあります。, git rebase
コミット履歴を変更するので、注意して使用してください。 リモートリポジトリでリベースを行うと、他の開発者がリモートリポジトリから最新のコード変更をプルしようとすると、多くの問題が発生する可能性があ ローカルリポジトリでのみgit rebase
を実行することを忘れないでください。
それはあなたが’日の最高とマージし、リベースするために知っておく必要があるすべてです。