0

Linuxマシンでプッシュおよびプルするために使用するベアgitリポジトリがあります(ベアgitリポジトリをリモートoriginlinuxと呼びましょう)。originlinuxをリモートとして使用している作業リポジトリから、プッシュアンドプルして、最終的にgithubに配置することにしました。私は彼らのWebGUIにgithubのリポジトリを追加し、コマンドに続いて、を使用して、作業リポジトリにリモートリポジトリを追加します(リモートorigingithubと呼びましょう)。git remote addgit pull --rebasegit push(これらのいずれかを取得せずに新しく作成されたgithubリポジトリに単純にプッシュすることは許可されなかったため、プッシュする前にプルします:'ヒント:現在のブランチの先端が遅れているため、更新は拒否されました'。これは何かと関係があると思いますreadmeファイルを作成するオプション)。そしてここに問題があります、これらのステップを実行した後、originlinuxリポジトリはorigingithubと完全に同期されませまったく同じコミットがあり、まったく同じ作業リポジトリからプッシュされた場合でも、リポジトリ。誰かがこれが発生する理由と、リモートリポジトリの作成方法を並べ替えずにこれが発生しないようにするために別の方法で何ができるかを詳しく説明してもらえますか?私が使用しているワークフローや操作の順序はgitlandでは意味がないようですが、他にどのようにして複数のリモートリポジトリを1つの作業コピーに同期させておくのでしょうか。

ありがとう!

4

1 に答える 1

1

2つのリポジトリには同じコミットがありません。

を実行したらgit pull --rebase、プロジェクトの履歴全体を書き直して、すべてのリビジョンにそのreadmeファイルが含まれるようにします。したがって、履歴内のすべてのコミットには、異なるSHA1識別子があります。

これから回復できる方法はいくつかあります。

まず、ローカルリポジトリの状態を元に戻して、状態または最初の(github以外の)リモートと一致させることができます。これにより、githubで作成したreadmeファイル(必要に応じて、他の場所にコピーして後でgitに追加できます)と、最初のリモートにプッシュしなかった変更(変更を含む)が削除されます。コミットされていません)。

git reset --hard originlinux/master
git push -f origingithub

そこでの-fオプションにより、一部のコミットが削除されている場合でも、プッシュが強制されます。これは一般的に避けるべきことですが、この場合のように必要な場合もあります。

もう1つのオプションは、最初のリモコンに強制的にプッシュして、リベースによって発生した新しい履歴を受け入れることです。

git push -f originlinux

あなたが言及した3つのリポジトリだけが1つである場合、これらの方法のどれを使用するかはそれほど重要ではありません。他のリポジトリがある場合は、履歴のどのバージョンがより広く知られているかを判断し、そのバージョンを保持することをお勧めします。

于 2013-02-01T20:06:38.123 に答える