0

Aという名前の github にレポがあります。このリポジトリを github からローカルに複製しました。元のレポ A には「a」という名前のブランチがあり、これは A の以前のバージョンです。履歴を削除し、レポのすべてのファイルを置き換えたレポの所有者からのコミットがありました。2つを比較すると、githubで、A and a are entirely different commit histories

私の問題は、所有者がマスターブランチを早送りする前に、同期されているようなものにコミットをプッシュしたいということです。しかし、コミットする前に git pull を実行すると (これは良い方法です)、まったく同期していないため、問題が発生することは間違いありません。

最善の解決策は、マスターが何をするかを追跡するのをやめ、それを私が知っている限り不可能なブランチに置き換えることです。早送りコミットを削除して、「a」ブランチに同期させるにはどうすればよいですか。

PS レポの所有者は![rejected] master -> master (non-fast-forward)、git pull を実行しようとしています。「彼の現在のブランチの先端は、リモートの対応するブランチの背後にあります」と言います

不明な点がある場合は、お気軽にお問い合わせください。2 日連続でこの問題に直面しています。ありがとう。

4

2 に答える 2

1

(どこかに隠された質問があったら、きっと見つかりませんでした。あなたが何を尋ねようとしたかを推測した上での私の答えは次のとおりです:)

git pull何かをコミットする前に、ブラインドを行うことが良い習慣であるとあなたが考える理由はわかりません。続いgit fetchgitk master origin/master確実に実行することは、現在のステータスを把握するのに意味があります。次に、通常、との間で決定する必要がgit checkout master && git rebase origin/masterありgit checkout master && git merge origin/masterます。

ローカルmasterブランチが本来あるべきではない場所にある場合は、最初にコミットされていない変更がないことを確認してから、ブランチを好きな場所git checkout master && git reset --hard [sha1-of-the-commit-you-want]に移動します。master次に、のマスターブランチをorigin新しい正しい状態で上書きする場合は、を実行しますgit push -f origin master。他の人がmasterから古いものをチェックした場合origin、あなたの新しいをフォローするためにすべてのコミットをリベースする必要があることに注意してくださいmaster。詳細については、 https://www.kernel.org/pub/software/scm/git/docs/git-rebase.html#_recovering_from_upstream_rebaseを参照してください。

于 2013-03-05T12:12:01.643 に答える
0

私は簡単な解決策でそれを解決しました。1. でローカルの変更がコミットされまし
git commit -a -m 'temp'た。
2. ローカル マシンに反映されたすべての変更を含む新しいブランチを作成しました。
3. master ブランチでチェックアウトを行いました。
git checkout master
4. 元のリポジトリにコミットした後、強制的にプッシュしました。
git push -f upstream master
これで、ローカルと元のリポジトリが完全に同期されました。PS強制プッシュは履歴を変更するため、多くの警告が表示されます。そのため、非常に慎重に使用してください。

于 2013-03-06T14:18:15.283 に答える