2017-10-31 9 views
1

私のローカル名前空間にリポジトリ(1つはmasterブランチ)がフォークされました。git:フォークされたリポジトリの初期状態にリセット

以来、masterの上にいくつかのコミットがあり、さらにブランチ(test-branch)があります。

私は何を実行することです:

  • ロールバック私は

潜在的な方法のあるよう

  • test-branchを維持レポをフォークしたときにあった状態にmaster支店これについてはmasterをチェックアウトし、ログの履歴を表示し、最後のコミットのshaを見つけ、git reset <sha_of_last_commit_of_forked_repo>を実行します。

    別の方法がありますか?

    fyi remotesoriginupstreamの2つを設定しました(アップストリームは、pushでフォークしたレポです)。

  • +1

    'git reset upstream/master'はどうですか? –

    +0

    thxはトリックを行いました...ファイルを望んでいなかったので、 'git reset -hard upstream/master'を実行しました – pkaramol

    +0

    @LasseVågsætherカールスン私は、これが私を'上流/マスター(進化している間に平均している)ではなく、レポをフォークするときのものではありません(これは大丈夫です、私は気にしません) – pkaramol

    答えて

    1

    アップストリームのマスターでローカルをハードリセットできます。

    $ git checkout master 
    
    $ git fetch upstream     # update local upstream history but not merged with working tree 
    $ git reset --hard upstream/master # replace local 'master' history = upstream/master history 
    

    さて、あなたはmasterから新しいブランチtest-branchに作成し、チェックアウトすることができます。

    $ git checkout -b test-branch 
    
    1

    上流が進化したと言います。

    最後に、アップストリームから自分のコードに変更を統合したことがあります。これは、最初にフォークを作成したとき(つまり、アップストリームの変更を追加したり、作業を元に戻したりしていません。あなたはがあなたの仕事をリベースまたは追加の変更にマージされてい場合

    git merge-base master upstream/master 
    

    あなたは、そのコマンドの結果をリセットすることができ

    git reset --hard `git merge-base master upstream/master` 
    

    、それはあなたがどこのgitポイントに得ていることが可能ですあなたのフォークの「元の」状態を追跡していないだけです。 gitが重要と考えるものではありません。なぜなら、あなたのフォークはgitに関する限り、上流の別のクローンに過ぎないからです。

    今後の参考として、フォークを作成し、後で「フォーク時の最後のアップストリームコミット」を参照する必要があると思われる場合は、タグ付けする必要があります。

    関連する問題