2016-09-19 2 views
2

まだプッシュされたコミットを変更するプロセスを完全に理解するのにはいくつかの困難があります。
私はマスターブランチで作業していません(その点についてはわかりません)。Commit_2(下記参照)に間違ったデータをコミットしてプッシュしました。
私はこのコミットからのみファイルを変更したいと思います。他のものは変更しないでください。
もちろん、私はherehereのように、git-rebase、cherry-pickなどのドキュメントとSOからの非常に良い回答を読んだことがありますが、どうやってそれを行うのかまだ分かりません。

特定のブランチ上の特定のプッシュされたコミットからのGit変更コード

したがって、基本的にファイルを変更するにはどうすればいいですか?Commit_2

commit 54sdf4f4d5f4dsf4555q5aaaa44fr 
Author: me <[email protected]> 
Date: Wed Sep 14 10:25:09 2016 +0200 

    Commit_3 

commit ghgzf4x1522qx1x5f222y4d 
Author: me <[email protected]> 
Date: Tue Sep 13 15:01:42 2016 +0200 

    Commit_2 

commit dfsdc4ycx45ds4fyc6d4fysfsd 
Author: me <[email protected]> 
Date: Tue Sep 13 14:57:08 2016 +0200 

    Commit_1 
+0

パスワードを変更して、ローカル仕事をまだプッシュしていないので、復帰コミットを修正することができます。あなたがプッシュしていると、プッシュすることによって損なわれています。あなたは何かを妥協することはできません。 –

+0

プライベートレポは小さなチームと共有されているので、重要ではありません。しかし、本当に必要な場合に備えて私がそれをできることを確かめたい。 – Mornor

答えて

1

一つのアプローチは、新しいが完全Commit_2に変更し、すべてのファイルに変更を元に戻すことになるコミット追加するCommit_2を、元に戻すかもしれません。これはすべての変更を削除したい場合には完璧ですが、の一部をのままにします。

ランCommit_2に変更されたファイルを参照するには、次のコマンドを実行します。

git show --pretty="" --name-only dfsdc4yc 

今あなたがしたいファイルを識別はを維持し、各ファイルに対して次のように入力します。

git checkout 54sdf4f4 file/to/restore 

54sdf4f4は、Commit_3のSHA-1ハッシュです。これは、保存したいファイルに対して行われたすべてを効果的にやり直します。

これで変更をコミットできます。

git commit --amend -m 'Undo of certain files from Commit_2' 
+1

これは通常はお勧めですが、間違ってコミットされたパスワードを消毒する場合は書き直しが必要です。そうでなければ、他の人が悪用するためにパスワードを履歴に残しておくことができます。 –

+2

@JeffPuckettII、間違って*プッシュ*パスワードが必要です**パスワードを変更する**。 –

1

私は編集のためにepickからコミットインタラクティブリベース

git rebase -i ghgzf4x1522qx1x5f222y4d^ 

設定が好き。次に、変更を加えます(パスワードの削除)。その後、続行します。

これで、履歴を書き換えたので、強制的にリモートにプッシュする必要があります。

git push <remote> <branch> --force 

その他のものは、早送りができないようにする必要があります。

git fetch <remote> 
git reset --hard <remote>/<branch> 

それとも

git pull --rebase 
1

コミットで何かを変更する方法はありません。これまでコミットは、すべてのコンテンツと履歴から派生したsha1チェックサムによって識別されます。したがって、何かを変更すると、sha1が異なるため、異なるコミットになります。

だから、あなたが行うことができる唯一のことは、問題がリポジトリからコミットしより良いバージョンでにそれを置き換えるを削除です。これを行うには、実行したすべてのブランチにそれを含まない新しいバージョンを強制的に(git push -f)押してください。新しいバージョンをgit commit --amend(最新のコミットの場合)、git rebase -i(存在しない場合)または(履歴が深い場合)で作成します。

しかし、リポジトリからコミットをすでに取得している人がいる場合は、には、のままです。あなたはそれらを止めることはできません。

+0

もし 'git rebase -i [commit_id]'なら、変更を行い、 'git push -f'を実行すると、より新しいコミットの情報が失われますか? – Mornor

+0

@Mornorの場合、そのリベースに含まれているすべてのコミットを、情報を含まない新しいバージョンに置き換えます。しかし、そのリベースのコミットだけ - 古いコミットに基づいて他のコミットがあれば、それらは古いコミットに基づいて残ります。 –

+0

彼は 'git revert'を使えば機能的にコミットを元に戻すことができますが、元のコミットはまだあなたが言及した通りです。 –

関連する問題