2017-07-03 14 views
2

私はブランチで作業していますが、最初のコミットで新しいメソッドを追加するためのインターフェイスを変更してから、実装クラスを変更しました。git:古いコミットからファイルを削除する

私はコードベースで既存のメソッドを見つけました。私が望むものはほとんどありません。最初のコミットでファイルをチェックアウトしたいと思います。

これまでのコミットの前にファイルをリセットしていたので、これを行う方法がわかりませんでした。過去のコミットから削除したいファイルをチェックアウトしましたが、新しいコミットを作成しました。ファイルはコードレビューの一部としてルツボに表示されましたが、変更はありませんでした。

誰かが私にこのことをどうやって説明してもらえますか?

答えて

1

ファイルが変更されてから元に戻ったことを履歴に含めることを望まない場合は、履歴の書き換えを行う必要があります。問題のコミットがプッシュされている(おそらく他の開発者と共有されている)場合は、上書きした問題は回避しようとしている問題よりも悪くなる可能性があります。

これを実行する最も基本的な方法は、対話型のリベースです。あなたはcurrent_branchは、あなたが取り組んでいるものは何でもブランチで、Bはあなたがメソッドを追加したコミットされ、あなたが

git rebase -i A current_branch 

は(SHA IDでAを交換すると言うことができ

... A --- B --- C --- D <--(current_branch) 

を持っている場合対応するコミットの)。これにより、TODOリストを持つテキストエディタが起動し、各行はコミットを表します。

Bのコマンドを探します(最初の行にする必要があります)。コミット中のだけが元に戻す変更の場合は、その行を削除してください。それ以外の場合は、行の最初の単語を「選択」から「編集」に変更します。

次に、エディタを保存して終了します。次に、プロンプトに従います。 Bを編集すると、変更を促すメッセージが表示されます。そのファイルを元に戻してください。 Bからの変更を削除すると競合が発生する場合は、これらの競合を解消するように求められます。

最終的にあなたが成功したリベースを得るが、注意することが重要:current_branchは以前にプッシュされていた場合、あなたは今、あなたがプッシュしようとすると、Gitは(current_branchへの更新がなるために文句を言うでしょう

... A --- B --- C --- D <--(origin/current_branch) 
    \ 
     B' --- C' --- D' <--(current_branch) 

を持っています早送りではない)。プッシュを強制すると、ブランチを使用しているすべてのユーザーは、「上流リベース」から回復する必要があります(「上流リベースからの回復」のgit rebase文書を参照)。

あなたが他のレポユーザーと調整する必要があると言えば、私はあなたに素晴らしいことを指示していません。私はあなたがそうしないと、結果として生じる回復プロセスを誤って処理すると、あなたの仕事は元に戻されるだろうと警告しています。

+0

私はこのフィーチャーブランチに貢献している唯一の人です。自分のコミットが4つあり、問題のファイルは最初のコミットでのみ変更されていますので、あなたの指示に従ってください。 – berimbolo

+0

私はgit resetとgit checkoutの組み合わせを使って、対話型rebaseモードでgit commit --amendを使い、最後にgit rebase --continueを使ってうまく動作します。助けてくれてありがとう! – berimbolo

関連する問題