5

私は少し漬け物になっています。

私は数ヶ月前にレポのフォークで開発を始めました。いくつか変更を加えました。プルリクエストとしてコードをマスターにプッシュバックしようとしていましたが、その間にかなりの数の変更があったことに気付きました...

そこで、Githubの「Pullin UpstreamChanges」の指示に従って、次のことを試しました。

$ git remote add upstream ...  # savon/httpi
$ git fetch upstream
$ git merge upstream/master
$ git push origin/master       # coldnebo/httpi

しかし、今では私のフォークはかなり乱雑です。私はまだgitの初心者なので、用語が何であるかを推測するのではなく、私が得たものと期待したものを簡単に示します。

これが私が欲しい差分です。変更を失うことなくリベース/リバートしてこれを行う方法はありますか?

なんてめちゃくちゃ。

多分git pullもっと良かったでしょうか?

変更はそれほど多くないので、回復できない場合はいつでも手動で差分してリマスターできますが、将来的にはこれを行うための「正しい方法」を探しています。

4

3 に答える 3

6

リポジトリが fubar の場合は、次の手順で回復します。

$ git remote update     # make sure origin and upstream are up to date
$ git checkout master
$ git branch my_changes   # just to make sure my stuff isn't lost
$ git reset --hard upstream/master
$ git status
# On branch master
# Your branch is behind 'origin/master' by 8 commits, and can be fast-forwarded.
#

その早送りのがらくたを無視してください、それはあなたを助けません、ただマスターをリセットしてください.

$ git push origin +master   # now, fork matches upstream/master

では、前作を復習できるようにするにはどうすればよいのでしょうか。

$ git diff --no-ext-diff --no-prefix master..my_changes > patchfile
$ patch -p0 < patchfile   # apply the patchfile to master
$ git diff     # to verify patch visually.
$ rm patchfile   # clean up
$ rake spec      # verify that it really works.
$ git add .
$ git status     # double triple verify
$ git commit .
$ git push origin master

それはひどかった。リベースを試みましたが、「変更なし」と言い続け、何もチェックインするように求められませんでしたか? 私はここで何が起こっているのか理解していないと確信しています. 私はこれを git の経験不足のせいにしようと思っていますが、変更をプルすることは git では非常に一般的なことだと思います。何かが欠けているに違いありません。

于 2013-01-10T16:47:41.527 に答える
6

作成する各プル リクエストに対して常に新しいブランチを作成する必要があります。リクエストを作成するために github にプッシュする前に、ブランチを最新のアップストリーム ブランチにリベースする必要があります。

Github はあなたがこれに使用すると言っています。あまり変更がない場合はgit merge使用することを好みます。これにより、マージ コミットが防止されます。git rebase upstream/master


変更した内容が上流ブランチで既に変更されているため、リベースを続行できない場合があります。たとえば、次のtext.txtようなファイルがあるとします。

Lorem ipsum

これを更新する PR を作成しLorem ipsum!、上流のブランチは既にこれHello Worldを ファイルは競合マーカーで更新され、使用するバージョンを選択でき、編集することもできます。この例では、次のように取得しますtext.txt

<<<<<<< YOUR_PR_BRANCH
Lorem Ipsum
=======
Hello World
>>>>>>> THE_UPSTREAM_BRANCH

この後、更新したファイルを追加しgit addて実行しgit rebase --continueます。

于 2013-01-07T16:17:30.770 に答える
1

git pull --rebase私のために働き、歴史をきれいに保ちます。

于 2013-01-07T16:32:25.680 に答える