2017-06-02 19 views
0

私のプロジェクトでは、コミットの1つに私が見つけられないバグが導入されました。私はその中のすべてを無視し、他のコミットから続行したい。コミットをスキップし、Gitで

コミット1:正常に動作します。

Commit2:機能しません。バグを導入しました。

Commit3は:コミット2.

上のエラーのために動作しません私の質問は、私は2をコミットで行われた変更なし3をコミットチェックアウトはどうすればよいのですか?

+0

あなたは2 – CoryKramer

+0

をコミット戻すことができますしかし、私はありません、それを行う場合の変更はコミット失うことになりますか? –

+0

@TheCook - いいえ、そうではありません。 (または、あなたが望んでいないと言ったもの以外の変更を失うことはなく、それでも歴史の中で見ることができます)。 –

答えて

0

あなたは歴史のコミットから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に基づいています。

1

未処理の履歴の場合は、git rebase --onto commit1 commit2 commit3を使用して履歴からコミット2を削除できます。これがすでに公開されている履歴の場合は、コミット2からの変更をgit revert commit2に戻すだけです。または、ローカルで一時的にしかコミットしたくない場合は、commit3をチェックアウトしてからgit revert commit2 -nを実行して、変更を元に戻しますがコミットは作成しません。 Gitリポジトリ内の操作のほとんどのよう

2

、あなたはいくつかの方法でそれを行うことができますする:

  • この間違ったコミットした場合、間違ったが

    git revert <commit2> 
    
  • をコミット戻すには、リモートサーバーにプッシュされていません(そうでなければ、すぐに修正して直してください!=)、作業をどこかに保存して後で修正したい場合は、新しいローカルブランチを作成して、正しいコミットをcherrypickして作業を続けることができます。

    あなたは1がリベース、チェリーピックにコミットする以上のものを持っている場合は210
    git 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 

は、あなたが安全です、限り、あなたは押さないように、躊躇しないでください。)

関連する問題