私のプロジェクトでは、コミットの1つに私が見つけられないバグが導入されました。私はその中のすべてを無視し、他のコミットから続行したい。コミットをスキップし、Gitで
コミット1:正常に動作します。
Commit2:機能しません。バグを導入しました。
Commit3は:コミット2.
上のエラーのために動作しません私の質問は、私は2をコミットで行われた変更なし3をコミットチェックアウトはどうすればよいのですか?
私のプロジェクトでは、コミットの1つに私が見つけられないバグが導入されました。私はその中のすべてを無視し、他のコミットから続行したい。コミットをスキップし、Gitで
コミット1:正常に動作します。
Commit2:機能しません。バグを導入しました。
Commit3は:コミット2.
上のエラーのために動作しません私の質問は、私は2をコミットで行われた変更なし3をコミットチェックアウトはどうすればよいのですか?
あなたは歴史のコミットからcommit2
を削除するインタラクティブリベースを使用することができます。以下のように詳細手順(3つのコミットがmaster
枝の上にあると仮定):
git checkout master
git rebase -i HEAD~3
その後、対話型のウィンドウが表示されます。
pick <commit1 sha-1> commit1 message
drop <commit2 sha-1> commit2 message
pick <commit3 sha-1> commit3 message
が続いEscキーボタンや入力:wq
を入力してください:入力i
と変更はとしてそこにコミットします。 今度はcommit2
が削除され、commit3
の変更はcommit1
に基づいています。
未処理の履歴の場合は、git rebase --onto commit1 commit2 commit3
を使用して履歴からコミット2を削除できます。これがすでに公開されている履歴の場合は、コミット2からの変更をgit revert commit2
に戻すだけです。または、ローカルで一時的にしかコミットしたくない場合は、commit3をチェックアウトしてからgit revert commit2 -n
を実行して、変更を元に戻しますがコミットは作成しません。 Gitリポジトリ内の操作のほとんどのよう
、あなたはいくつかの方法でそれを行うことができますする:
この間違ったコミットした場合、間違ったが
git revert <commit2>
をコミット戻すには、リモートサーバーにプッシュされていません(そうでなければ、すぐに修正して直してください!=)、作業をどこかに保存して後で修正したい場合は、新しいローカルブランチを作成して、正しいコミットをcherrypickして作業を続けることができます。
あなたは1がリベース、チェリーピックにコミットする以上のものを持っている場合は210git checkout -b "myNewBranch" <commit1>
git cherry-pick <commit3>
が、これはすべてがcommit2(除外)から始まるコミット取り、それらをあなたの上の一つのすべてのものを適用します
###create your branch but do not check it out yet.
git branch "myNewBranch" <commit1>
git rebase <commit2> --onto "myNewBranch"
より便利です新しい支店。あなたはgitのコマンドラインに慣れていないですし、GUIむしろ使用する場合
、あなたはgitkでそれを行う簡単にすることができます。これは、リバートやチェリーピックなどの簡単な操作に適しています。
一つ最後のアドバイスは、Gitの始まるとき: あなたは、すぐにそれがでversionnedされている、あなたはいつも戻って、以前の状況に取得することができ、ワークスペース物事が間違っていると台無しにするかもしれない使用して、コミット:
コマンドで再生するときにこれを知っgit reflog
//locate your commit and copy the sha key
git reset --hard mykey
は、あなたが安全です、限り、あなたは押さないように、躊躇しないでください。)
あなたは2 – CoryKramer
をコミット戻すことができますしかし、私はありません、それを行う場合の変更はコミット失うことになりますか? –
@TheCook - いいえ、そうではありません。 (または、あなたが望んでいないと言ったもの以外の変更を失うことはなく、それでも歴史の中で見ることができます)。 –