2

マスターにリベースしようとした後、ブランチを台無しにしました。

私のコミット履歴では、かなりの数のリファクタリング (名前の変更と移動) と、クラスの削除がありました。そして、リモートリポジトリにプッシュすべきではありません。(それ以来、私は自分自身を蹴っています)。

しかし、行われたことは行われます。リベースは履歴を書き換えてコミット(?) (リベース中の競合解決により) するため、以前のコミット HEAD~2 にリセットして最初からやり直すことはできません。すべてのコミットが書き直され、コミットが間違っています。

git から HEAD~2 のスナップショットを取得できます。スナップショットをブランチにマージ (リベース) し、変更をロールバックして最初からやり直す方法はありますか?

よろしくお願いします!</p>

デビッド

更新、内部の git Web ページから、以前のコミットを確認できます。

commit  6f577850231fed07eebdacd3bc5862f84356d803
tree    8be1d60056697bc1b8d7284c4e85a6d1738ac3e2    tree | snapshot
parent  1ca61d4dd69b7be649906834d44bb7fec390153d    commit | diff

また、「スナップショット」リンクをクリックすると、gz でスナップショットをダウンロードできます。しかし、私がやろうとすると:

git checkout -b newBranch 6f577850231fed07eebdacd3bc5862f84356d803

私が得た:

fatal: reference is not a tree: 6f577850231fed07eebdacd3bc5862f84356d803

私が実行した場合:

git checkout -b --force newBranch 6f577850231fed07eebdacd3bc5862f84356d803

私が得た:

fatal: git checkout: updating paths is incompatible with switching branches.

このコミットはリモートリポジトリにのみ存在すると思いますか? gitでチェックアウトするにはどうすればよいですか?

解決策: この SO の回答は、私の問題の解決策です: git rebaseを元に戻す

4

1 に答える 1

2
fatal: reference is not a tree: 6f577850231fed07eebdacd3bc5862f84356d803

OP David Zhaoは、不完全なリベースまたは無効な HEAD 参照もそのメッセージをトリガーする可能性があることを発見しました: "
Undoing a git rebase "

つまり、git reset --hard HEAD@{x}' x' は で見つかった HEAD 参照git reflogです。


最初の答え:サブモジュールでも発生します(ここではそうではありませんでした)

Git submodule head 'reference is not a tree' error」を参照してください:

誰かが、サブモジュール sub の未公開コミットを参照するスーパー プロジェクト コミットを作成しました。

したがって、サブモジュールがある場合は、コミットのチェックアウトを開始する前に、親リポジトリとサブモジュールが同期していることを確認し、ローカルリポジトリに親リポジトリを取得する (gitweb ページに表示される履歴を更新する) 必要があります。.
そのコミットがサブモジュールからのものである場合は、そのチェックアウトを行う前に、まずそのサブモジュール ディレクトリに移動します。

そこから、そのブランチをプッシュしたもの (たとえば、' ' など) にマージして戻し、新しいmasterコミットを作成し(したがって履歴の書き換えはありません)、「git コマンドでコミットを作成する」で説明されている方法の 1 つを選択します。別のようなブランチ」。

于 2012-06-14T19:58:31.487 に答える