1

そのため、ファイルを処理して追跡ブランチにコミットし、リモートブランチにプッシュしました。他の誰かが同じファイルに変更を加え、私の変更と競合し、問題を解決したはずですが、解決策として私の編集を削除しました。次回アプリケーションにアクセスしたときにエラーが発生し、それが私が取り組んでいるものにあることに気づきました。

ファイルの履歴を表示しようとしましたが、コミットが履歴から削除されたようです。プロジェクトに取り組んでいる人々は、高度なgitテクニックを実行していません。そのほとんどは、フェッチマージ、コミットプッシュです。

コミットが私の履歴からなくなった理由がわかりません。そこにあるべきではないか、またはマージの競合があり、誰かが解決してマージコミットを実行することになった場合、それは履歴を削除しますか?

私たちはビットバケットでリポジトリをホストしており、そこに行ってファイルを更新するために必要なコードでコミットを見つけることができますが、これは理想的とは言えません。

私たちは皆、gitを初めて使用し、プロジェクトの1つで初めてそれを使用しているので、これはかなり無愛想です。

4

2 に答える 2

3

Gitの内部構造はDAGの構造であり、ブランチはコミットへの変更可能なポインターです(タグは不変のポインターです)。Gitのログには、これらのブランチ/コミットポインターをバックトラックすることで到達可能なコミットのみが表示されます。どういうわけか、ブランチポインタが変更されたため、バックトラックによってコミットに到達できなくなりました。リベースのように、これを引き起こすために何か破壊的なことが起こりました。

コミットを見つけたので、これを行うことで、それがツリーのどこに収まるかを確認できます。

git checkout -b temp_branch
git reset --hard <lost-commit-sha1>
gitk --all

temp_branchがコミットをポイントしているので、DAGを確認することで何が起こったかを確認できます。

于 2012-04-04T18:49:15.403 に答える
1

あなたの質問に答えるには:誰かがブランチの履歴を書き直しました。プッシュされたコミットを失う方法は他にありません。

これを回避するための解決策:早送り以外のプッシュをほとんどの開発者とトレーニングに制限します。

于 2012-04-04T18:47:54.843 に答える