1

私は2つのコミット(ローカル)を持っていて、私の歴史は次のとおりでした:A - B

  • コミット A では、ファイルmyfile_v1.txt
  • コミット B では、他の複数のファイル。
  • 私の作業ディレクトリで、最初のコミットのファイルを少し修正して更新しました: myfile_v2.txt

何かをプッシュする前に履歴をきれいにするために、コミット A を修正し、ファイルを新しい形式に置き換えたいと思いました。

これは私がしました :

  • reset --softAで
  • add myfile_v2.txt
  • commit --amend

これで、コミット A に修正されたファイルが含まれていることがわかりますが、以前の HEAD に戻る方法も、B を再度コミットしないとこれが可能かどうかもわかりません。

何か案は?

4

2 に答える 2

1

以前のコミットを変更することはできません。各コミットは一意です。

できることは、新しいコミットで履歴を再作成することです。コマンドの使用git-rebase

私はあなたが今この時点にいることを理解しています:

Pre_A - A - B
      \
       A1

「B」コミットを失いました。コミットを回復するにはgit-reflog

git reflog

ブランチの最新の位置が表示されますHEAD。そのうちの 1 つが B コミットです。行頭のハッシュを書き留めます。例:

git reflog
  a123b Ammend Commit of Previous A that generates A1 commit
  b234c git reset soft to A Commit
  c345d B Commit
  b234c A Commit ##Look that the HASH is the same that the git-reset##

Bコミットのハッシュを取得したら。ブランチを作成してコミットを回復します。

git branch tmpBranch c345d

この時点で必要なのは、このコミットを「A」ではなく「A1」の新しい履歴に入れることです。これを使用して取得しますgit-rebase

あなたは master ブランチで作業していたと思います。

git checkout tmpBranch
git rebase --onto master tmpBranch~1 tmpBranch

これにより、マスター(A1コミットを指す)でtmpBranchコミット(この場合は1つのコミットのみ、Bコミット)まで、tmpBranchコミットの1つのコミットから履歴が再作成されます。

于 2016-05-11T09:10:46.590 に答える
1

コミット ハッシュには、このコミットの完全な履歴が含まれています。したがって、履歴を変更すると、履歴はそのコミットに属しなくなりますが、コミットを再作成する必要があります。

これを行うには多くの方法があります。あなたの場合、あなたはただできるだけcherry-pick Bで、すべてが良いです。

私がそれを行う方法は、インタラクティブなリベース(rebase -i)です。最初に対話型リベースを実行し、スタンザをAtoに変更しedit、次に commit amending を実行してからリベースを続行します。または、最初に新しいコミットを作成してから、2 番目のコミットの順序を変更するためにB使用します。または、auto-fixup または auto-squash を使用することもできます。rebase -isquashfixup

于 2016-05-11T08:50:37.780 に答える