2016-04-12 14 views
2

私は何かをコミットした場合、私は同じようにuncommitことができることを知っている:効果的に1コミット「戻る」します多くのコミットが追加された後にコミットをコミットする方法はありますか?

get reset HEAD~1 

。私の問題は、私がコミットした後、プルをしたことです。実際、私はたくさんの引き込みを行い、ますます多くのコードを追加しました。そこで、私は次のようになりました。

--> Other User Commit A <<-- WAS PUSHED 
--> Other User Commit B <<-- WAS PUSHED 
--> MY COMMIT <<---- This is what must be UNDONE, that was never pushed 
--> Other User Commit E <<-- WAS PUSHED 
--> Other User Commit F <<-- WAS PUSHED 

リセットHEAD〜1は、単に「その他のユーザーコミットA」を取り除きます。しかし、私は "マイコミット"を削除する必要がありますが、これは決してプッシュされませんでした。

どのように私のこのコミットを取り除くための任意のアイデアですか?

(私は偶然、1.6Gbのファイルをコミットしたのですが、プッシュがうまくいかなかった理由を理解できませんでしたが、作業を続けて、新しいコードを取り込んでいます...しかし、私はちょうど今、この大きなファイルがコミットされていないことに気付くまで)...

助けてくれれば大いに感謝しますか?

UPDATE

最善の解決策は、私が追加したファイルを「非加算」できるようになるものであろう。

+0

ブランチを使用しているブランチはありますか?あなたはそれを再構築/書き直すのは良いでしょうか? – Makoto

+0

履歴を書き換えることはできません...その1つを取り除くことしかできないようにしてください – coderama

+0

コードリポジトリの1.6GBファイルだと考えると、履歴を書き直して*リポジトリでは、あなたのコードを引っ張ってくるすべての人があなたのブランチをフェッチするときに、そのコードを強制的に取り除かないようにします。 – Makoto

答えて

5

このブランチをプッシュしたことがないので、履歴を書き直して、悪いコミットを削除する必要があります。これを行うには、あなたのブランチ上でインタラクティブなリベースを行うことができます。

git rebase -i HEAD~5 

これはあなたのブランチの歴史の中であなたの最後の5つのコミットを示す画面が表示されます。あなたMY COMMITラベルされたコミットを含む行を削除

pick dl3n2l2 Other User Commit A 
pick be7mme2 Other User Commit B 
pick loc83ns MY COMMIT 
pick af8uo31 Other User Commit E 
pick dl983md Other User Commit F 

:それは次のようになります。その行をファイルから削除して、保存して閉じます。これにより、ブランチからの悪いコミットが効果的に削除され、リモートにプッシュできるようになります。

+0

これは最も有望です。私はそれを試してみましょう... – coderama

+0

@Juanによって与えられた答えも働くが、それは完全に支店を放棄する。 –

+0

これを実行した後、私はエラーが発生します。エラー:未処理の作業ツリーファイル 'public_html/sites/default/files/advagg_js/js__OFsU.js'はマージによって上書きされます。 – coderama

1

あなたは経由して上にプッシュされたその他の変更触れずにコミット戻すことができます:その1つの中だけで変更がコミット逆になります

git revert <commit> 

を。一度プッシュすると、そのコミットは起こらなかったはずです(ただし、gitの履歴はまだそこにあります)。

もう一つのオプションは、ファイルを削除して削除をコミットすることです。

+1

大量のバイナリファイルを含む悪いコミットが依然としてリモートにプッシュされる可能性があるので、これは最良の選択肢ではないと思います。 –

+0

私は避けたいもの、つまり巨大なバイナリファイルをコミットすることです。 – coderama

2

あなたのコミットをプッシュしたことがないので、履歴を変更したくない場合は、新しいブランチを作成することをお勧めします。あなたが取り組んで再分岐は機能と呼ばれていると仮定しましょう、あなただけ行うことができます:

git checkout "Other User Commit E' code" 
git branch -f feature 
git pull origin feature 

これはちょうどあなたが押されたことがない場合には十分であるべき、あなたに機能ブランチの最新のコードの新しいコピーを取得しますあなたのコミット。
git branch -fは、現在コミットしているブランチに目的のブランチを持ち込みます。

+0

@coderamaこの方法では、現在のリモートブランチ状態に戻ってローカル変更を忘れているので、ファイルを "追加解除"します – Juan

+0

振り返ってみると、 – coderama

関連する問題