39

私の同僚はしばらく前に変更を行いました-新しい機能を導入しました-そしてそれは(成功して)gitにコミットされました。しかし、今ではその機能が失われています。

を使用しgit log --reverseて、その関数がまだコード内にあった最後のコミットを見つけることができました (48d60a03)。次の (e6f28bfd) コミット (問題の関数が消えた場所) は (14158e1 の) マージですがgit show、これらのいずれかを実行しても欠落しているコードの削除は明らかになりません。

言い換えれば、コードはマージ中に削除されずに、マージ中のどちらのブランチでも削除されませんでした。

数時間 StackOverflow を検索すると、競合解決中の手動エラーに違いないと結論付けられます (正しく理解できましたか?)。それで、それは起こります。質問は - どうすればそのコードを取り戻すことができますか - 不足しているコードで新しいコミットを行う以外に方法はありますか?

関連する質問; このようにバイバイする他の例があるかどうか、どうにかして見つけることができますか? ちょっと心配です(;_;)

4

6 に答える 6

10

履歴は既にプッシュされているため、最善の方法は新しいコミットを行うことです。そうしないと、他のコードが失われ、全員のリポジトリが台無しになるリスクがあります。

最後のコミットが機能する場所がわかっているので、次のことができgit checkout 48d60a03 -- <name of file with function>ます。次に、関数を使用して古い/新しいファイルをコミットできます。

ファイルには他の変更が含まれている可能性が高いため、git resetファイルのステージングを解除し、git add -p探している関数の変更のみを追加するために使用することをお勧めします。

これを防ぐために、マージの完了後に実行できる包括的なテスト スイートを入手することをお勧めします。これにより、テストが失敗してコードが失われる可能性を最小限に抑えることができます。

于 2013-07-08T13:52:56.007 に答える
10

ある時点でコミットされた変更を完全に失うことは困難です。「git reflog」を実行してみて、失われたコミットを見つけられるかどうかを確認してください。次に、「git merge [失われたコミットの SHA1]」を実行して、現在のブランチにマージできます。

于 2013-07-08T13:02:14.423 に答える
7

失われたコードの識別可能なセクションがわかっている場合は、次を使用して、コードを失った正確なマージを見つけることができる場合があります。git log -G regexToSearchFor -m --patch

  • -G <regex>Gitに「一致する追加/削除された行を含むパッチテキストの違いを探す」ように指示し<regex>ます
  • -mマージコミットを含めるように Git に指示します
  • --patch見つかったものの差分を表示するように Git に指示します
于 2016-08-18T20:47:45.667 に答える
5

関連する質問; このようにバイバイする他の例があるかどうか、どうにかして見つけることができますか? ちょっと心配です(;_;)

git whatchangedを試してください。例えば、

git whatchanged --since="2 weeks ago" -- gitk

過去 2 週間の変更をファイル gitk に表示します。

于 2013-07-08T13:09:26.217 に答える
0

私もまったく同じでした。製品のバージョン 2 のような新しいブランチがありました。次に、現在のマスター (製品のバージョン 1) をバージョン 2 にマージしたいと考えました。このマージ中に、製品のバージョン 1 の多くの新しいコードが失われます。コードが失われた数十のファイルがあり、手動で確認する必要があるため、非常にイライラします:(

さて、私は 2 つの異なるフォルダー (両方ともマスター上) を見ていましたが、最新の変更をそれらの 1 つにプルするのを忘れていました。

于 2019-07-24T14:20:44.903 に答える