2012-03-06 8 views
1

私が3週間働いているブランチにコミットが100個あるとします。時々(毎日、本当に)私は起源/マスターから引き出し、それを私の枝に合併します。私のコミット(マージを含む)を履歴を変更せずに1つのコミットにまとめる

どのようにして私のコミットのすべてを1つのコミットにまとめ、歴史を台無しにすることはできますか?どういうわけか私がコミットしたものをすべてスカッシュすると、私のプルリクエストが起点/マスターに移動したときに、マージされた起点/マスタープルが破棄されますか?

答えて

8

"踏みつぶす"と "保存歴"は、用語のほぼ正反対です。

上流のマスターの変更ではなく、変更のみを含む1つのコミットを作成することを意味する場合は、origin/masterにrebaseを置き、そこからスカッシュすることをお勧めします。

git fetch origin 
git rebase -i origin/master 

をしてからpickからsquashに最初の後の行のすべてを変更する:あなたは、対話型リベースの単一の呼び出しからこのすべてを行うことができます。

+0

私はブランチ "foo"をチェックアウトしました。私は 'git rebase -i origin/master'を実行し、私はたくさんのコミットを見ます。もし私がそれらすべてを押しつぶし、その後マスターにプッシュすると、以前にマージされ、押しつぶされたコミットは、元/マスターの履歴から永久になくなりますか? (例えば、私のスカッシュコミットの前にコミットするために私はgit reset head backを返します。リセットするとすべてが同じになるでしょうか?) – tester

+0

リストにはすでにマスタになっているコミットがありますか?もしそうなら、何かが間違っています。 – Amber

+0

私が見ているコミットの大部分は、git pull中にマージした/自動化したものです。逆順でもあります(最新のコミットは最下位にあります)。何か案は? – tester