2011-11-21 14 views
23

可能性の重複をコミットを退治する最も簡単な方法:
How can I squash my last X commits together using git?のGit:マスター上

私はGitHubの上でホストされているプロジェクトがあると私は地元のクローンを持っています。私はすでにGitHubにプッシュしている小さなコミットの負荷があります。これは、すべてデフォルトの* masterブランチを使用して行われています。

私はマージ - スカッシュとリベースなどの間で混乱しました... 複数の履歴コミットを1つのコミットに組み合わせてGitHubにプッシュする最も簡単な方法は何ですか?

答えて

43

開始する前に、作業を失うことを避けるために、git statusがクリーン(つまり、そのコマンドの出力がないこと)を確認する必要があります。あなたが欲しいものを行うための最も簡単な方法は、おそらくです:

git reset --soft <LAST-COMMIT-THAT'S-OK> 
git commit -m 'Many squashed commits' 
git push --force origin master 

あなたは、これは歴史を書き換えていることを念頭に置く必要があります(あなたがgit push--forceオプションを必要とする理由です)ので、他の誰かがクローン化されている可能性がある場合は、これを避ける必要がありますあなたのリポジトリから引っ張ってください。他の枝が定期的にレポ(のみ早送り)から引いた場合にこれを行うことの影響は何ですか

+2

:いくつかのより多くの選択肢については、この質問とその回答を参照してください? – Gabe

+1

@whoami:他の人がそのブランチを引っ張ると '(強制的に更新されます)'が表示され、gitはブランチの更新を拒否します。 (a)すべての作業がコミットされていることを確認するか(b)典型的にはrebase(例えば 'git rebase origin/master')するか、ブランチを強制更新されたリモート追跡ブランチバージョンにリセットする例えば ​​'git reset -hard origin/master'を使って)。あなたが何をすべきかを人々に説明して幸せでない限り、間違いなく書き直された履歴を強制的にプッシュするのは一番良い方法です。 –

+0

彼らは地元の枝と遠隔地が分かれていることを知り、ただ早送りではなく、その変更をマージする必要があります。 –

関連する問題