2016-10-07 14 views
-2

をマージの競合を示しマスターからリベースしてみてくださいbr2Gitのリベースマスターした後、再び私は2本の枝を持って再び

そしてそれをmasterにマージして、すべての新しい変更を大きなコミットとしてコミットします。ここで

は私がやったことです:

git fetch --all 
git checkout br2 
git rebase origin/master 
git rebase --continue until I resolved all conflicts 

-checked everything is working 

git checkout master 
git merge br2 

git commit review (my alias...can ignore) 

git checkout br2 

git rebase master (should have done nothing, no?) 

Q:私が最初に引くと、再びすべての競合を解決しなければなりませんでした。なぜこれが起こったのですか?

q:git commit reviewの前に、すべてのコミットを1つのコミットにする必要がありますか?

私はこれを見た:

git rebase -i master 
That command will show a list of each commit, as such: 


pick fb554f5 This is commit 1 
pick 2bd1903 This is commit 2 
pick d987ebf This is commit 3 


# Rebase 9cbc329..d987ebf onto 9cbc329 
# 
# Commands: 
# p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# f, fixup = like "squash", but discard this commit's log message 
# x, exec = run command (the rest of the line) using shell 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# However, if you remove everything, the rebase will be aborted. 
# 
Edit the summary shown to you by the rebase command, leaving the commit you want to be the main commit as "pick" and changing all subsequent "pick" commands as "squash": 


pick fb554f5 This is commit 1 
squash 2bd1903 This is commit 2 
squash d987ebf This is commit 3 

を私はあなたがすでにb2にいくつかの変更をプッシュした場合、あなたが使用する必要があります)私はすでに

答えて

0

Q1マスターをチェックアウトしたと確認されませんでした強制押す。 git push origin/b2 --force。これにより、リモート原点/ b2がb2のリベースされたローカルバージョンに置き換えられます。

q2)これは、コミットを縮小するために有効です。

+0

1)なぜそれは強制的でなければならないのですか? 2)この対話型のリベースをいつ行うべきですか? 'master >> git merge br2'の後に?それは 'マスターにマスターを暴露する'でしょうか? –

+1

br2がリベースされているため、br2に加えられた変更を早送りできないため、強制的にプッシュする必要があります。マスターにm1、m2をコミットしている場合は、b1、b2をコミットしてプッシュすると、原点b2はこの順番でコミットします。 m1、m2、b1、b2。次に、ローカルコピーを上にリベースするマスターm3に別のコミットがある場合、ローカルにはm1、m2、m3、b1、b2があります。これにより、エンドに追加できるコミットだけを追加できるので、通常のプッシュを行うことはできません。強制プッシュを使用すると、m3をコミット履歴に挿入できます。 –

+0

スカッシュについては、申し訳ありませんが、私は質問を誤解しました。マスターの上でリベースするときは、対話型のリベースを行うことをお勧めします。事実の後で、git rebase -i HEAD〜3を使ってコミットすることもできます。対話的なrebaseと以前のコミットの詳細については、このページを参照してください。https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History –

0

git rebaseに関して。

基本的には、現在のブランチからすべてのコミットをベースブランチに書き換えます。これは、ローカルブランチがリモートブランチと異なることを意味します(ただし、コミットはほとんど同じでなければなりませんが、競合は除きます)。 ローカルのブランチを強制的にリモコンに押し込んで、プッシュを強制的にgit push -f originにする必要があります。

+0

説明してくれてありがとうございますが、 'br2 to origin/br2'を押しても問題はありませんでした。問題は 'git checkout br2;を実行した後で始まりました。 git rebase master'はこれが理にかなっていますか? –

+0

いいえ、少なくとも問題はありません。 – Tiba

+0

理論的には、これは次のようなものでなければなりません: 'git checkout br2'(誰か他の人が並行して変更しない限りうまくいくはずです)。 'git rebase master'(' git rebase --continue'を使って競合を解決する可能性があります); 'git push -f origin/br2'; br2とマスターをマージするよりも。 – Tiba

関連する問題