12

GitHub でリポジトリをフォークし、プル リクエストを送信しました。プロジェクトのメンテナーはプル リクエストを拒否しましたが、フォーラムでより良い解決策を見つけました。彼らは、別の変更を加えた別のプル リクエストを作成するように指示しました。ただし、フォークしてから更新がメイン リポジトリにプッシュされたため、GitHub のリポジトリのフォークは古くなっています。また、GitHub のリポジトリには、プロジェクトの一部として受け入れられなかったため、そこにあるべきではない追加のコミット (私のプル リクエスト コミット) があります。

この質問を見つけました: GitHub のフォークされたリポジトリを更新するにはどうすればよいですか?

私は指示に従いました、具体的には、これを行いました:

git remote add upstream git://github.com/fuel/core
git fetch upstream

その結果、次のようになりました。

remote: Counting objects: 93, done.
remote: Compressing objects: 100% (47/47), done.
remote: Total 69 (delta 49), reused 40 (delta 20)
Unpacking objects: 100% (69/69), done.
From git://github.com/fuel/core
 * [new branch]      1.0/master -> upstream/1.0/master
 * [new branch]      1.1/master -> upstream/1.1/master
 * [new branch]      1.2/develop -> upstream/1.2/develop
 * [new branch]      1.2/master -> upstream/1.2/master
 * [new branch]      1.3/develop -> upstream/1.3/develop
 * [new branch]      1.3/master -> upstream/1.3/master
 * [new branch]      1.4/develop -> upstream/1.4/develop
 * [new branch]      1.4/master -> upstream/1.4/master
 * [new branch]      1.5/develop -> upstream/1.5/develop
 * [new branch]      1.5/master -> upstream/1.5/master
 * [new branch]      1.6/develop -> upstream/1.6/develop
 * [new branch]      feature/better-hmvc -> upstream/feature/better-hmvc

さて、それですべて問題ないようです。私は正しいブランチにいることを確認しました:

git checkout 1.6/develop
Already on '1.6/develop'

語。さて、これについて:

git rebase upstream/1.6/develop
First, rewinding head to replay your work on top of it...
Applying: prevent invalid XML node names

待って…何?「無効な XML ノード名を防止する」が適用されているのはなぜですか? これは、プロジェクトのメンテナーによって拒否されたプル リクエストです。「リベース」の本当の意味を理解していないのは明らかです。今私git statusが言うなら:

# On branch 1.6/develop
nothing to commit (working directory clean)

するとgit log、問題の半分が解決したことがわかります。フォークしてからプロジェクトに取り込まれた変更は、現在、git log. ただし、最新のコミットは「無効な XML ノード名の防止」のままです。どうすれば消せますか?

プロジェクトに対して行われた最後のコミットをチェックアウトしてみました:

git checkout 5f31a4df55e5b6ca1b2092534063a1fce4a32181

ただし、これにより、切り離された HEAD 状態になります。見回して、変更を加えて、コミットできると書かれています。それが私がやりたいことだとは思いません。HEAD が commit 5f31a4df55e5b6ca1b2092534063a1fce4a32181 を指すようにしたいと思います。私の次のステップは何ですか?

4

2 に答える 2

1

この質問にはすでに受け入れられた回答がありますが、私の場合は受け入れられた回答がうまくいかなかったため、別の方法でお話しします。

実行中

$git rebase    
There is no tracking information....

$git checkout
Already on 'master'

$git reset --hard upstream/master
ambiguous argument upstream/master

そのような状況が発生した場合は、次の手順を実行してください。

ローカルで HEAD をリセットします。

$git reset HEAD

サーバーリポジトリで同じ変更を行います。

$git reset HEAD^

次に、元のフォークされたリポジトリに加えた変更に関するメッセージが表示され、すべてのファイルが一覧表示されます。ファイル名で変更されたステージングされていません。

次を使用して変更を元に戻します。

$git stash

これで、これらの変更を強制的にサーバーにプッシュして、ローカルとリモートのリポジトリを同じ HEAD に向けることができます。

$git push origin +HEAD

これで、フォークしたときと同じリポジトリにいます。元のリポジトリから最新のコードを取得できるようになりました。

于 2014-01-30T05:12:52.120 に答える