2013-06-27 16 views
19

私たちの共通の開発ワークフローは、ブランチbをチェックアウトし、それにバッチをコミットし、コミットを1つにスチールします(まだbにあります)。Git squashはすべて矛盾することなくブランチにコミットします

ただし、すべてのコミットを縮退するプロセスでは、複数のステップで頻繁に競合が発生します。

私は基本的に1がそれをコミットにブランチを変更したいが、私はいくつかの検索を行ってきたが、私は正確に何を見つけていない最後の時のリポジトリの状態がb

にコミット表しを探しています。私はmerge --squashを望んでいません。なぜなら、マージする前に潰れたフィーチャーブランチをテストしたいからです。

+0

可能性をコミット[gitでは、マージ - スカッシュとリベースの違いは何ですか?](http://stackoverflow.com/questions/2427238/in-git-what-is-the-difference-between-merge-squash-アンドレバse) –

+0

その質問から、私は 'G'が' stable'になることを望んでいません。まだそれが機能ブランチ上にあることを望みます。もし私が何かを紛失しているかどうか分かりません –

+0

あなたはチェリーピックで 'G'を選ぶことができませんでしたか? –

答えて

40

コミット情報が必要ない場合は、ソフトリセットを行うだけです。その後、ファイルはそのまま残り、コミットすると、このコミットはリセットされたコミットの上になります。おそらく、コミットクラフト再その後

git merge-base HEAD BRANCH_YOU_BRANCHED_FROM 

その後

git reset --soft COMMIT_HASH 

にリセットするためにコミット見つけるには

git commit -am 'This is the new re-created one commit' 
+0

スマート!私はそれが好きです –

+0

これはとてもクールです。 –

5

これはからの回答にsimlarですRasmusが問題なく動作するはずの3つのステップに分かれています:

$ git merge feature1 
$ git reset --soft [email protected]{1} 
$ git commit -c feature1 

説明:

  1. マージや競合
  2. 機能ブランチからのメッセージや作者をコミット使用して、すべての変更をコミット段階的な変化を保つが、古いヘッドに
  3. をリセットを解決する最新の
関連する問題