0

私はこれまで SVN、GIT、Mercurial を使用してきましたが、後者の 2 つのワークフローは常にプル / マージ / プッシュのみで構成されていました。現在、ワークフローに親ブランチからのリベースが頻繁に含まれるプロジェクトに取り組んでおり、何が起こっているのか、またはワークフローが正しいものであるかどうかを完全に理解しているかどうかはわかりません。私は指定されたブランチですべての作業を行っているので、次のようになります。

git checkout dvl_bkend      // This is 'parent' branch
git checkout -b dvl_bogdan  // Created my own branch 

以下はすべて自分のブランチからのものです。コーディング セッションを開始すると、次のようになります。

git pull --rebase -s recursive -X ours origin dvl_bkend

安定したものができたらすぐに、コーディングなどを行います

git add stuff
git commit stuff
// rinse and repeat above two steps

プッシュする準備ができたとき。

git pull --rebase -s recursive -X ours origin dvl_bkend

この時点で、dvl_bogdan にプッシュしたいと思いますが、最初にプルする必要があるとは言えません。だから私:

git pull origin dvl_bogdan

これにより、マージする必要がある競合が発生します(なぜこれが起こっているのかわかりません)。この時点で、何かが正しくないと推測しています。とにかく、競合を解決すれば、次のことができます。

git push origin dvl_bogdan

プル リクエストの準備が整うまで、上記のすべての手順を繰り返します。次に、それらをさらに繰り返します。どこでフローを台無しにしていますか? リベースが重複したコミットを適用し続ける状況に何とかなりました:

   bogdan   5b31717  Merge branch 'develop_bogdan' of xx into develop_bogdan     8 May 2013

   Bogdan Neacsa    810d753  Updated payment service to recieve an Account entity now rather that creating it itself. Also change…   8 May 2013

   bogdan   429f97b  Fix to model and service in payments. Quick fix to tests after changes.     8 May 2013

   Bogdan Neacsa    7c6ff32  Updated payment service to recieve an Account entity now rather that creating it itself. Also change…   8 May 2013

   bogdan   d74ce5a  Fix to model and service in payments. Quick fix to tests after changes.     8 May 2013

   Bogdan Neacsa    8ab401e  Updated payment service to recieve an Account entity now rather that creating it itself. Also change…   8 May 2013

   bogdan   259349b  Fix to model and service in payments. Quick fix to tests after changes.     8 May 2013

ありがとう、ボグダン

編集: ------------ 私には不明確な部分 -------------------

したがって、私は dvl_bogdan ブランチにいて、リモート ブランチと同期しています。

git pull origin dvl_bogdan

これは、私が最新であることを示しています。今私がやります:

git pull --rebase -s recursive -X ours origin dvl_bkend

そして、これは私に競合を与えません。しかし、今私が試してみると:

git push origin dvl_bogdan

プッシュする前にプルを行うように求められますが、このプルによって競合が発生します。ここで何が起こっているのか本当に理解できません。

4

2 に答える 2

1

不明確な部分について明示的に:

git pull origin dvl_bogdan

これによりgit fetch、origin/dvl_bogdan を更新する と、git mergeorigin/dvl_bogdan からすべての変更をローカルの dvl_bogdan に適用しようとする が実行されます。それがあなたに言うなら、あなたは最新です。その後、誰もそのブランチをプッシュしませんでした。(予想どおり、このブランチだけで作業するつもりのようです。)

git pull --rebase -s recursive -X ours origin dvl_bkend

これにより、 git fetchorigin/dvl_bkend が更新されます。その後、リベースによってすべての変更がコピーされ、origin/dvl_bkend に適用されます。結果のブランチは、dvl_bogdan とはまったく関係ありません。今すぐ使用gitk origin/dvl_bogdan...dvl_bogdanして状況を確認してください: 共通の基盤があり、元のコミットが origin/dvl_bogdan で終わる 1 つのブランチ (1) と、dvl_bkend からの変更を含み、変更のコピーが一番上にある別のブランチ (2) があります。 .

git push origin dvl_bogdan

ここで、branch(2) を branch(1) にプッシュしようとしますが、これは早送りプッシュではないため機能しません。

これを解決するには、origin/dvl_bkend と origin/dvl_bogdan が 2 つの異なる、既に公開されているブランチであるという事実に直面してください。両方をマージコミットでマージする必要があり、まったく同じことを行うgit fetch && git merge origin/dvl_bkendまたは単に使用します。git pull

別の方法として、強制的にプッシュして dvl_bogdan を更新することもできますが、この場合何をしているのかをよく理解しておいてください。

于 2013-05-09T09:31:37.107 に答える