843

aq私のリポジトリには、私が取り組んでいるというブランチがあります。

次に、で新しい作業とバグをコミットしましたmaster

aqそれらのコミットをブランチに取り込むための最良の方法は何ですか?から別の新しいブランチを作成し、masterそれをaq

4

13 に答える 13

970

ブランチをチェックしてaq、からリベースしmasterます。

git checkout aq
git rebase master
于 2011-03-17T14:54:41.537 に答える
363

git merge origin/masterあなたがあなたのaqブランチにいるときだけあなたはそうすることができるはずです。

git checkout aq
git merge origin/master
于 2011-03-17T14:54:47.663 に答える
114

最初にマスターにチェックアウトします。

git checkout master

すべての変更、修正プログラム、およびコミットを実行し、マスターをプッシュします。

ブランチ'aq'に戻り、マスターをマージします。

git checkout aq
git merge master

あなたのブランチはマスターで最新になります。マージの適切で基本的な例は、3.2 Git Branching-Basic BranchingandMergingです。

于 2014-08-21T16:33:19.433 に答える
33

マスターバグ修正が他のコミットの中にないという保証はありません。したがって、単純にマージすることはできません。行う

git checkout aq
git cherry-pick commit1
git cherry-pick commit2
git cherry-pick commit3
...

それらのコミットがバグ修正を表すと仮定します。

ただし、今後は、バグ修正を別のブランチに保管してください。あなたはただすることができるでしょう

git merge hotfixes

それらすべてを通常のdevブランチにロールインしたい場合。

于 2011-03-17T22:07:51.243 に答える
20

これは(ここから)私のために働いた:

git checkout aq
git pull origin master
...
git push

引用:

git pull origin masterマスターブランチの内容をフェッチしてブランチとマージし、マージコミットを作成します。マージの競合がある場合は、この段階で通知されるため、続行する前にマージコミットを解決する必要があります。新しいマージコミットを含むローカルコミットをリモートサーバーにプッシュする準備ができたら、を実行しますgit push

于 2019-09-26T15:14:48.350 に答える
19

とマージするaq

git checkout master
git pull
git checkout aq
git merge --no-ff master
git push
于 2018-04-10T02:24:16.167 に答える
18

cherry-pick関連するコミットをブランチにコミットするか、ブランチをブランチにaqマージします。masteraq

于 2011-03-17T14:54:25.297 に答える
8

私にとっては、すでに変更が加えられていて、ベースブランチから最新のものが欲しかったのです。私はできませんでしたrebase、そしてcherry-pick永遠にかかったでしょう、それで私は次のことをしました:

git fetch origin <base branch name>  
git merge FETCH_HEAD

したがって、この場合:

git fetch origin master  
git merge FETCH_HEAD
于 2016-07-06T12:12:22.077 に答える
8

簡単な方法

# 1. Create a new remote branch A base on last master
# 2. Checkout A
# 3. Merge aq to A
于 2017-05-19T10:06:39.707 に答える
7

シナリオ :

  • マスターsaybranch-1からブランチを作成し、ローカルにプルしました。
  • 私の友人はmastersaybranch-2からブランチを作成しました。
  • 彼はいくつかのコード変更をマスターにコミットしました。
  • 次に、これらの変更をマスターブランチからローカルブランチに変更します。

解決

git stash // to save all existing changes in local branch
git checkout master // Switch to master branch from branch-1
git pull // take changes from the master
git checkout branch-1 // switchback to your own branch
git rebase master // merge all the changes and move you git head  forward
git stash apply // reapply all you saved changes 

「gitstashapply」を実行すると、ファイルに競合が見つかります。手動で修正する必要があり、これでプッシュする準備が整いました。

于 2020-05-15T06:10:52.570 に答える
4

編集:

以下の私の答えは、にマージする方法を文書化masteraqています。マージの詳細を表示すると、で行われaqた変更ではなく、マージの前に行われた変更が一覧表示されmasterます。たとえそうだと思っていても、それはおそらくあなたが望むものではないことに気づきました!

ただ:

git checkout aq
git merge master

結構です。

はい、この単純なマージは、からの変更masterがその時点で行われたことを示しaq、その逆ではありません。しかし、それは大丈夫です–それが起こったので!後で、最終的にブランチをにマージするmasterと、つまり、マージによって、行われたすべての変更が最終的に表示されますmaster(これはまさにあなたが望むものであり、とにかく人々がその情報を見つけることを期待するコミットです)。

私が確認したところ、以下のアプローチでも、最終的にすべてをにマージして戻すと、上記の通常のアプローチとまったく同じ変更(との間の元の分割aq以降に行われたすべての変更)が示されます。したがって、その唯一の本当の欠点は(過度に複雑で非標準であることを除けば...:-/)、最近の変更をn個巻き戻し、これがマージを通過した場合、以下のバージョンがロールバックされることです。 「間違った」ブランチ。手動で修正する必要があります(例:&)。aqmastermastergit reset --hard HEAD~<n>git refloggit reset --hard [sha]


[それで、私が以前考えていたのはそれでした:]

次の問題があります。

git checkout aq
git merge master

マージコミットに表示される変更(たとえば、Github、Bitbucket、またはお気に入りのローカルgit履歴ビューアーで現在または後で表示する場合)はマスターで行われた変更であり、意図したものではない可能性があるためです。

一方で

git checkout master
git merge aq

は、aqで行われた変更を示しています。これは、おそらくあなたが望むものです。(または、少なくとも、それは私が望むものであることがよくあります!)しかし、正しい変更を示すマージは間違ったブランチにあります!

どのように対処するのですか?!

完全なプロセスは、(上記の2番目のマージのように)aqで行われた変更を示すマージコミットで終了しますが、マージはaqブランチに影響します。

git checkout master
git merge aq
git checkout aq
git merge master
git checkout master
git reset --hard HEAD~1
git checkout aq

これ:aqをマスターにマージし、同じマージをaqに早送りし、マスターで元に戻し、再びaqに戻します!

何かが足りないような気がします。これは明らかにあなたが望んでいることのようで、難しいことです。

また、リベースは同等ではありません。aqで行われたコミットのタイムスタンプとIDが失われますが、これも私が望んでいることではありません。

于 2020-02-17T18:50:29.540 に答える
3

いくつかのオプションがあります。git rebase master aqコミット名を保持するブランチに移動しますが、これがリモートブランチの場合はリベースしないでください。git merge master aqコミット名を保持する必要がない場合は可能です。コミット名を保持したいが、それがリモートブランチである場合、コミットはブランチgit cherry-pick <commit hash>にコミットされます。

于 2017-01-27T23:12:57.770 に答える
0

これは、1行実行することでも実行できます。
git merge aq master

これは同等です

git checkout aq
git merge master
于 2019-11-04T22:19:53.600 に答える