リポジトリをforkした後、いくつかの変更を加えたところ、すべてをめちゃくちゃにしたようです。
現在のアップストリーム/マスターを作業のベースとして使用して、最初からやり直したいと思います。
リポジトリをリベースするか、削除する必要がありますか?
リポジトリをforkした後、いくつかの変更を加えたところ、すべてをめちゃくちゃにしたようです。
現在のアップストリーム/マスターを作業のベースとして使用して、最初からやり直したいと思います。
リポジトリをリベースするか、削除する必要がありますか?
回答:
最も簡単な解決策は次のupstream
とおりです( ' 'を、フォークされた元のリポジトリを参照するリモート名として使用):
git remote add upstream /url/to/original/repo
git fetch upstream
git checkout master
git reset --hard upstream/master
git push origin master --force
(このGitHubページと同様に、「状況が悪い場合はどうすればよいですか?」セクション)
master
ブランチで行われた変更が失われる可能性があることに注意してください(両方のためにローカルでreset --hard
、およびのためリモート側でpush --force
)。
上のコミットを保持したい場合は、代わりmaster
に、現在のの上でそれらのコミットを再生しupstream/master
ます。
リセット部分をに交換してくださいgit rebase upstream/master
。その後、まだプッシュを強制する必要があります。
「状況が悪い場合はどうすればよいですか?」も参照してください。
より完全な解決策、現在の作業のバックアップ(念のため)については、「git masterブランチをクリーンアップして、コミットを新しいブランチに移動する」で詳しく説明しています。
「」の説明については、「元のGitHubリポジトリから分岐したGitHubリポジトリに新しい更新をプルする」も参照してくださいupstream
。
注:最近のGitHubリポジトリはブランチをから保護master
しpush --force
ます。
したがって、master
最初に保護を解除する必要があります(下の画像を参照)。次に、強制的に押した後、再度保護する必要があります)。
注:特にGitHubには、(2019年2月)アップストリームにマージされたプルリクエストのフォークされたリポジトリを削除するショートカットがあります。
git reset --hard upstream/master
git reset
ました。
git remote
"コマンドを参照してください。
VonCの答えが大好きです。これが初心者向けの簡単なバージョンです。
origin
皆さんが知っていると確信しているgitリモートがあります。基本的に、git repoには必要なだけリモートを追加できます。したがって、私たちにできることは、フォークではなく元のリポジトリである新しいリモートを導入することです。私はそれを呼ぶのが好きですoriginal
元のリポジトリをリモートとしてフォークに追加しましょう。
git remote add original https://git-repo/original/original.git
次に、元のリポジトリをフェッチして、最新のコードが作成されていることを確認します
git fetch original
VonCが提案したように、マスターであることを確認してください。
git checkout master
元のリポジトリの最新コードでフォークを高速化するには、元のリモートに従ってマスターブランチをハードリセットするだけです。
git reset --hard original/master
これで完了です:)
fatal: ambiguous argument 'original/master': unknown revision or path not in the working tree.
最後のステップに入っています。何かアドバイス?
original
ローカルの "上流"であるupstream
ように、(Githubのドキュメントが使用する)よりも優れています。あいまいさを減らします。これがあなたがそれを使う理由なのかしら?origin/master
master
@VonCの素晴らしい答えに続きます。GitHub会社のポリシーで、マスターの「強制プッシュ」が許可されていない可能性があります。
remote: error: GH003: Sorry, force-pushing to master is not allowed.
このようなエラーメッセージが表示された場合は、次の手順を試してください。
フォークを効果的にリセットするには、次の手順に従う必要があります。
git checkout master
git reset --hard upstream/master
git checkout -b tmp_master
git push origin
GitHubでフォークを開き、「設定->ブランチ->デフォルトブランチ」で、新しいデフォルトブランチとして「new_master」を選択します。これで、 'master'ブランチを強制的にプッシュできます。
git checkout master
git push --force origin
次に、GitHub設定のデフォルトブランチとして「master」を設定し直す必要があります。「tmp_master」を削除するには:
git push origin --delete tmp_master
git branch -D tmp_master
変更を失うことについて警告するその他の回答は引き続き適用されますので、注意してください。
(誰もがgitコマンドラインインターフェースで物事を行うことを好むわけではありません)
これが設定されたら、それ以降は手順7〜13を実行するだけで済みます。
フェッチ>マスターブランチをチェックアウト>マスターにリセット>サーバーに変更をプッシュ
「マスター」ブランチをダブルクリックして、まだチェックアウトされていない場合はチェックアウトします。
リセットしたいコミットを見つけます。リポジトリを「マスター」と呼んだ場合、「マスター/マスター」タグが付いたコミットを見つけたいと思うでしょう。
コミットを右クリックし、[現在のブランチをこのコミットにリセット]をクリックします。
ダイアログで、[使用モード]フィールドを[ハード-すべての作業コピーの変更を破棄する]に設定し、[OK]をクリックします(失いたくない変更を最初に別のブランチに配置してください)。
できました!