2015-09-28 12 views
8

私の典型的なgitワークフローは、マスターブランチからブランチを切り離し、小さなコミットを行い、定期的にマスターからマージしながら追いつくことです。マージ後のインタラクティブリベース/その他インターリーブ鉱山

私はgithubでプルリクエストを開き、受け入れられたらブランチを削除します。インタラクティブにリベースするのですが、私がすると、私はマージコミットと他の人のコミットが自分のものと交錯するでしょう。私はどのように/私はそれらのコミットをスカッシュすることができますか、グループ/スカッシュ鉱山だけではわからないのですか?

それはリベースする時間来るときたとえば、私のブランチのための私のgitのログは次のようになります。私は何も可能だと何が対話型リベースをやって退治していないときに問題を抱えている

merge commit 
someone else's commit 
one of my commits 
another one of my commits 
another merge commit 
another person's commit 
one of my commits, the first one after branching 

を並べ替えがコミットします。上記のワークフローを考えると、何をお勧めしますか?

+1

あなたがリベース使用している理由はありますか? – ilj

+0

@ilj他のチームメンバーはできるだけクリーンな履歴を保つのが好きなので、コミットの履歴を妥当なものに保つことです。私は個人的には合理的に泥棒の歴史(完全にラインからではない)気にしないでください – jkj2000

+0

私の経験では、それは解決よりも多くの問題を作成します。 – ilj

答えて

3

私のオフィスで使用するプロセスは、プルリクエストをマージする前に、masterブランチ(またはマージすると思われるブランチ)にリベースすることです。

> git fetch upstream master 
> git rebase upstream/master 
+1

ありがとう、ありがとう。だから私はマスターから周期的にリベースするのではなく、それをマージします。 – jkj2000

2

私はそれらのコミットをつぶすか、できるかどうか/わからない:これは、あなたのコミットが他の人とあなたのコミットのインターリーブを排除master、現在他のすべてのコミットの上で注文されることを保証しますグループ/スカッシュ鉱山だけ?

スカッシュのみあなたのコミットは他になりません!

最近私は同じ問題に直面しました。私はプルリクエストに41回コミットしました。ブランチにはマージ競合があり、プルリクエストは古くなっていました。私は今あなたが直面しているいくつかの問題に対処しなければなりませんでした。私は私が何を実装したかに触れるだけです。

one of my commits 
another one of my commits 
one of my commits, the first one after branching 

(あなたがしたい場合は、それらのすべてを)私はあなたのコミットスカッシュを示唆しています。

たとえば、3つのコミットがある場合、それらを縮小し、インタラクティブなリベースを使用して1つにすることができます。コマンドの説明を参照してください:あなたが最初のコミットとのスカッシュで選ぶ/言い替える書くことができるインタラクティブなリベースインタフェースを参照してください、

$ git rebase -i HEAD~3 

$ git rebase -i HEAD~n 

たとえば、3つのコミットをスカッシュしたいです残りの部分。理解を深めるためにこのビデオをご覧ください。

Squashing commits

merge commit 
someone else's commit 
another merge commit 
another person's commit 

他にリベース(他の誰か)これはgitのを使用しているとき、誰もが直面する共通の問題である

をコミットします。あなたの地元のレポに取り組んでいるとします。しばらくの間働いた後、いくつかのコミットを行いました。元のリモートリポジトリにプッシュしたいと思っています。クール、あなたはmerge commitと言うこのgit pushの問題を起こしました。

誰かが、今更新されている同じリモートリポジトリにコミットしている可能性があります。ローカルのリポジトリはリモートのものに更新されないため、merge commit problemがあります。 この問題を解決すればどうなるでしょうか?ローカルマシンのレポをオリジナルのリモートマシンに更新できますか?出来ますか?

はい、リベースすることもできます。どうやって?

あなたは:ここで何が起こっている

git pull --rebase 

? Gitはすべてのローカルコミットを巻き戻し(元に戻す)、リモートコミットをプルダウンして、新しく引き出されたリモートコミットの上にローカルコミットを再生します。 gitで処理できない競合が発生した場合は、コミットを手動でマージする機会が与えられます。git rebase --continueを実行して、ローカルコミットの再生を続行します。あなたがマスターにあなたのブランチをマージしたい場合は

は詳細

ため、このblog postを参照してください?

Best (and safest) way to merge a git branch into master

関連する問題