2

Gitlovers、私には 1 つの問題があります。

数コミット前、最後に dev ブランチを master にマージした後、dev ブランチに戻すのを忘れていました。そして、私は間違ったブランチにコミットし続けました: master - マージが行われた場所に戻るはずです。master にマージした後に dev ブランチに戻ったかのようにブランチを交換するにはどうすればよいですか?

リベースで試しました:

git checkout master; git rebase dev; そして git checkout master; git rebase --onto dev;私のために奇妙なことをしている..

ここに画像の説明を入力

私のひどい英語でごめんなさい(訂正は大歓迎です):-)

4

4 に答える 4

4

履歴が直線的でない、より複雑なシナリオでも機能する一般的なソリューション。master ブランチにいることを確認してから、次のようにします

git rebase --preserve-merges --onto master^2 master dev

あなたがこのような状況に陥るには、次のことを行ったことが必要です。

  1. チェックアウトしたマスター
  2. マージされた開発
  3. チェックアウトされた開発者
  4. マージされたマスター (!!!)
  5. devで開発を続けた

間違いはステップ 4 です。これはバック マージと呼ばれ、回避する必要があります。ただし、一部のトランク ベースのワークフローではメリットがあります。

于 2012-10-12T07:09:08.543 に答える
2

基本的に、一連のコミットをマスターブランチから開発ブランチに戻します。あるトピックブランチから別のトピックブランチにコミットを移動しようとしても、同様の状況が発生しました。コマンドの--ontoスイッチがこれを行います。rebaseここでブログ投稿全体を繰り返したくありませんが、ここで私が行ったことを詳しく説明します-http://nibrahim.net.in/2012/01/09/moving_topic_branches_in_git.html

于 2012-10-12T07:13:26.687 に答える
1

リベースまたはマージする必要はありません。ブランチは、コミットのラベルにすぎません。を使用してラベルを移動できますgit reset。その名前にもかかわらず、reset実際にはmove labels aroundコマンドです。

  1. git tag master dev.targetmaster を移動する前に、dev が移動する場所にタグを保存します。
  2. git checkout master
  3. git reset --hard devmaster を dev がある場所に移動します。
  4. git checkout dev
  5. git reset --hard dev.targetmaster があった場所に dev を移動します。
  6. git tag -d dev.targetプレースホルダーを削除します。

コミットIDを使用してタグなしでそれを行うことができますが、タグは、物事を台無しにした場合の大きな保険です. これは基本的に、トピックブランチが既に存在することを除いて、 git-reset man pageの「コミットを取り消してトピックブランチにする」レシピです。

または、ブランチを交換したいだけなので、名前を変更することもできます!

  1. git branch -m master dev.mv
  2. git branch -m dev master
  3. git branch -m dev.mv dev

欠点は、アップストリーム トラッキングがある場合、それが正しくないことです。あなたは.git/configそれを修正するために入る必要があります.

于 2012-10-12T09:22:04.240 に答える
1

あなたは試すことができます:

$ git checkout dev
$ git merge master
$ get checkout master
$ get reset --hard [the revision you want to return]
于 2012-10-12T06:25:28.830 に答える