2011-12-06 16 views
2

私は地方開発ブランチ "dev"とリモート "master"ブランチを持っています。 "dev"ブランチの場合、私は非常に複雑なコミットの履歴を持っています(ほぼ20回のコミット)。私は何 ...しかし、私は、このプロセスは非常にエラーが発生しやすい(あなたがそれぞれ1つずつをコミットし、競合を解決適用する必要が...)とイライラさせた、「DEV」でgitの開発ブランチでローカルコミットをマージする方法は?

"git rebase -i origin/master" 

を使用しようとしました私は今、 "dev"のコミット履歴を単一のコミットに圧縮し、この大きなコミットをレビューしてマージするために "マスター"にプッシュする必要があります。 これを行うための安全かつ効率的な方法はありますか? 皆さんありがとう!あなたのdevの枝の上にあると仮定すると、次に、あなたのコミットを絞るために使用されるマージのポイントになり返されるものは何でも

$> git merge-base dev origin/master 
<commit> 

...

+1

なぜこれをしようとしているのか詳しく説明したいことがあります。この操作をマージする競合がある場合は、変更を縮小して1つのコミットとして適用すると、同じ競合が発生します。あなたは履歴を一回のコミットにスカッシュしますか?リモートマスター上で線形履歴が必要なのか、マージしてもいいですか? – djs

答えて

1

私はそのようなことをするだろう、ちょうど行います。効果的にバックgitの状態で「変更されたファイル」セクションにあなたの20回の連続したコミットのすべての変更を置く

$> git reset <commit> 

を...

それからちょうど新しいもののようなコミットを作成する(必ずGitは--allを追加しますが、あなたがここで何をしたいです):

$> git add --all 
$> git commit -m "my squeezed stuff" 

その後、あなたの競合を修正して、原点にプッシュ...

・ホープそれが役に立ちます

+0

良い音が、私はそれをショット、感謝、billaudを与えることができます! – rayeaster

+0

私はすでに "dev"と "master"とマージしているので、$ git merge-base dev origin/masterをマージしているので動作しません "dev"と "master"私のコミットを新しいコミットに絞ってレビューのために "マスター"にプッシュするだけです。 – rayeaster

+0

その場合は、単にgit resetを実行してください.Hard HEAD ^を使ってマージコミットを削除してから、そこに提案したことをしてください。それは理にかなっていますか? –

0

現在のブランチをリセットするのは問題がある場合は、新しいブランチを作成することは良い方法です(それを行いました)が、すべてをコピーする必要はありません。

マスターに基づいてdev2を作成したら、現在作業ディレクトリに存在するファイルdevのファイル(!)を変更せずにcheckout dev、次にcheckout dev2に変更できます。
を参照してください "switch git branch without files checkout":

git symbolic-ref HEAD refs/heads/dev2 
git reset 

その後、あなたはすべてのものを追加してコミットすることができます。

関連する問題