aq
私のリポジトリには、私が取り組んでいるというブランチがあります。
次に、で新しい作業とバグをコミットしましたmaster
。
aq
それらのコミットをブランチに取り込むための最良の方法は何ですか?から別の新しいブランチを作成し、master
それをaq
?
aq
私のリポジトリには、私が取り組んでいるというブランチがあります。
次に、で新しい作業とバグをコミットしましたmaster
。
aq
それらのコミットをブランチに取り込むための最良の方法は何ですか?から別の新しいブランチを作成し、master
それをaq
?
ブランチをチェックしてaq
、からリベースしmaster
ます。
git checkout aq
git rebase master
git merge origin/master
あなたがあなたのaqブランチにいるときだけあなたはそうすることができるはずです。
git checkout aq
git merge origin/master
最初にマスターにチェックアウトします。
git checkout master
すべての変更、修正プログラム、およびコミットを実行し、マスターをプッシュします。
ブランチ'aq'に戻り、マスターをマージします。
git checkout aq
git merge master
あなたのブランチはマスターで最新になります。マージの適切で基本的な例は、3.2 Git Branching-Basic BranchingandMergingです。
マスターバグ修正が他のコミットの中にないという保証はありません。したがって、単純にマージすることはできません。行う
git checkout aq
git cherry-pick commit1
git cherry-pick commit2
git cherry-pick commit3
...
それらのコミットがバグ修正を表すと仮定します。
ただし、今後は、バグ修正を別のブランチに保管してください。あなたはただすることができるでしょう
git merge hotfixes
それらすべてを通常のdevブランチにロールインしたい場合。
これは(ここから)私のために働いた:
git checkout aq
git pull origin master
...
git push
引用:
git pull origin master
マスターブランチの内容をフェッチしてブランチとマージし、マージコミットを作成します。マージの競合がある場合は、この段階で通知されるため、続行する前にマージコミットを解決する必要があります。新しいマージコミットを含むローカルコミットをリモートサーバーにプッシュする準備ができたら、を実行しますgit push
。
とマージするaq
git checkout master
git pull
git checkout aq
git merge --no-ff master
git push
cherry-pick
関連するコミットをブランチにコミットするか、ブランチをブランチにaq
マージします。master
aq
私にとっては、すでに変更が加えられていて、ベースブランチから最新のものが欲しかったのです。私はできませんでしたrebase
、そしてcherry-pick
永遠にかかったでしょう、それで私は次のことをしました:
git fetch origin <base branch name>
git merge FETCH_HEAD
したがって、この場合:
git fetch origin master
git merge FETCH_HEAD
簡単な方法
# 1. Create a new remote branch A base on last master
# 2. Checkout A
# 3. Merge aq to A
シナリオ :
解決
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」を実行すると、ファイルに競合が見つかります。手動で修正する必要があり、これでプッシュする準備が整いました。
編集:
以下の私の答えは、にマージする方法を文書化master
しaq
ています。マージの詳細を表示すると、で行われaq
た変更ではなく、マージの前に行われた変更が一覧表示されmaster
ます。たとえそうだと思っていても、それはおそらくあなたが望むものではないことに気づきました!
ただ:
git checkout aq
git merge master
結構です。
はい、この単純なマージは、からの変更master
がその時点で行われたことを示しaq
、その逆ではありません。しかし、それは大丈夫です–それが起こったので!後で、最終的にブランチをにマージするmaster
と、つまり、マージによって、行われたすべての変更が最終的に表示されますmaster
(これはまさにあなたが望むものであり、とにかく人々がその情報を見つけることを期待するコミットです)。
私が確認したところ、以下のアプローチでも、最終的にすべてをにマージして戻すと、上記の通常のアプローチとまったく同じ変更(との間の元の分割aq
以降に行われたすべての変更)が示されます。したがって、その唯一の本当の欠点は(過度に複雑で非標準であることを除けば...:-/)、最近の変更をn個巻き戻し、これがマージを通過した場合、以下のバージョンがロールバックされることです。 「間違った」ブランチ。手動で修正する必要があります(例:&)。aq
master
master
git reset --hard HEAD~<n>
git reflog
git 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が失われますが、これも私が望んでいることではありません。
いくつかのオプションがあります。git rebase master aq
コミット名を保持するブランチに移動しますが、これがリモートブランチの場合はリベースしないでください。git merge master aq
コミット名を保持する必要がない場合は可能です。コミット名を保持したいが、それがリモートブランチである場合、コミットはブランチgit cherry-pick <commit hash>
にコミットされます。
これは、1行実行することでも実行できます。
git merge aq master
これは同等です
git checkout aq
git merge master