1

ブランチ間で押しつぶし、その間にリモートからプッシュ/プルするとどうなるか疑問に思っています。

DEVELOPER 1
1. $ git checkout foo
2. $ git commit -m 'changed file' file.txt
   $ git commit -m 'changed another file' file2.txt
3. $ git push

DEVELOPER 2
4. $ git checkout foo
5. $ git pull    // gets commits from 2. above
6. $ git checkout bar
7. $ git merge foo
8. $ git rebase -i HEAD~3

1 - 3 -- いくつかのファイルにいくつかのローカル変更を加え、それらを個別にコミットしてからプッシュします。in 4 - 8 -- 他の誰かが私のコミットをプルし、別のブランチをチェックアウトし、最初のブランチをマージしてから、マージでコミットをつぶそうとします。

これは歴史を台無しにしますか、それは「悪い」ですか?

4

1 に答える 1

1

git rebase -i HEAD~3ブランチ内のコミット (押しつぶされているかどうかにかかわらず) をリプレイし、barブランチによって参照されているものはそのままにしてfooおきます。

ブランチbarがすでにプッシュされている場合 (「git rebase development branch」を参照) は、強制的にプッシュして他の開発者に問題を起こさせる必要があるため、好ましくありませんbar

しかし、それはコミットの内容を複製するという点でも悪いです (fooブランチの内容と で押しつぶされたものの間で、 からへbarの将来のマージを行い、再度コミット 2 と 3を適用します。 ここで、a のオプション( ) rebase は、マージの親を保持するために便利ですが、やりたいこと (スカッシュ) とは互換性がない可能性があります。foobar
-p--preserve-merges

一般に、プルしたばかりの公開履歴を変更しないようにしてください (ブランチのコミット 2 と 3 などfoo) 。

于 2012-10-11T10:42:38.987 に答える