コミットを別のブランチにプッシュする


384

変更をコミットして、あるブランチから別のブランチにプッシュすることは可能ですか?

BRANCH1で変更をコミットし、それらをBRANCH2にプッシュしたいとします。

BRANCH1から、それを行うことは有効ですか?

git push origin **BRANCH2**

次に、BRANCH1をリセットしますか?

回答:


710

それはほとんど機能します。

デフォルト以外のブランチにプッシュするときは、ソース参照とターゲット参照を指定する必要があります。

git push origin branch1:branch2

または

git push <remote> <branch with new changes>:<branch you are pushing to> 

26
両方を行うbranch1branch2、リモート上にある必要がありますか?ローカルbranch1からリモートにプッシュしたい場合はどうなりorigin branch2ますか?
orad

11
@orad:いいえ。最初の部分は、実際にはローカルコミットの単なる識別子です。ブランチである必要さえありません。
2015年

6
@abhisekp:同じ構文を使用します。ソースブランチを参照するには、<remote>/<branch>
SLaks

4
@abhisekp:ちょうど私が言ったとおりにしてください。現在のブランチは完全に無関係です。
SLaks

21
(私自身のように)git push origin :branch2現在のローカルブランチをリモートbranch2にプッシュするだけだと思って実行しようとする人がいることに注意してください。代わりにリモートが削除されbranch2ます。正しい方法はgit push origin HEAD:branch2です。
Helder Pereira

72

確かに、それはBRANCH2の早送りであるか、強制した場合にのみ機能します。そのようなことをする正しい構文は

git push <remote> <source branch>:<dest branch> 

動作の詳細については、git push manページの「refspec」の説明を参照してください。また、強制プッシュとリセットはどちらも「履歴を書き換える」操作であり、リモートリポジトリやその他のリポジトリに関して何をしているのかを完全に確信しているのでない限り、気の弱い人によって試みられるべきではないことに注意してください。同じプロジェクトのフォーク/クローンを持っている人。


6
ありがとう!で強制できることを追加しますgit push --force remote local-branch:remote-branch
Ferran Maylinch

16

とても簡単です。ローカルとリモートの両方の場所にあるブランチAに変更を加えたが、これらの変更を、どこにも存在しないブランチBにプッシュしたいとします。

ステップ-01:新しいブランチBを作成してそれに切り替える

git checkout -b B

ステップ-02:新しいローカルブランチに変更を追加する

git add。//または特定のファイル

ステップ-03:変更をコミットする

git commit -m "commit_message"

ステップ-04:変更を新しいブランチBにプッシュします。以下のコマンドは、新しいブランチBもリモートで作成します

git push origin B

これで、ブランチBがブランチAよりも1つ多くコミットされることをbitbucketから確認できます。また、ブランチAをチェックアウトすると、ブランチBにプッシュされているため、これらの変更はありません。

注:変更をブランチAにコミットし、その後それらの変更を新しいブランチBにシフトする場合は、最初にそれらの変更をリセットする必要があります。#HappyLearning


2

私の場合、ローカルコミットが1つありましたが、これはにプッシュされませんorigin\masterでしたが、ローカルmasterブランチにコミットされました。このローカルコミットを別のブランチにプッシュする必要があります。

Gitの拡張あなたはこのような何かを行うことができます。

  • (存在しない場合は作成し、)コミットをプッシュしたい新しいブランチをチェックアウトします。
  • 履歴からコミットを選択します。コミットされ、このブランチにプッシュされます。
  • 右クリックして、[ Cherry pick commit ]を選択します。
  • 押しチェリーピックその後ボタンを。
  • 選択したコミットがチェックアウトしたブランチに適用されます。コミットしてプッシュします。
  • 不完全なコミットで古いブランチをチェックしてください。
  • このブランチを最後の2番目のコミットにハードリセットします。すべて正常でした(ここで何をしているのかに注意してください)。最後の2番目のコミットを右クリックし、[ 現在のブランチをここにリセット ]を選択して、これを行うことができます。何をしているのかわかっている場合は、操作を確認してください。

GITコマンドラインでも実行できます。David Christensenからコピーした例:

git cherry-pick+ git resetがはるかに迅速なワークフローであることがわかります。

同じシナリオを使用すると、「機能」がブランチであり、最上位のコミットが正しくないため、これを実行する方がはるかに簡単です。

git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^

かなりの作業を節約git cherry-pick し、処理するように設計されたシナリオです。

また、これが最上位のコミットでなくても機能することにも注意してください。次のようにして、チェリーピックの議論にコミットする必要があります。

git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # whack the specific commit from the history


2

私はgit push origin branch1:branch2コマンドで悪い結果を得ました:

私の場合、branch2は削除branch1され、いくつかの新しい変更で更新されました。

したがって、branch2からの変更のプッシュのみが必要な場合はbranch1、以下の手順を試してください。

  • branch1git add .
  • branch1git commit -m 'comments'
  • branch1git push origin branch1

  • branch2git pull origin branch1

  • On branch1:前のコミットに戻ります。


0

あなたはこれを簡単に行うことができます

git status
git add .
git commit -m "any commit"
git pull origin (branch name, master in my case)
git push origin current branch(master):branch 2(development)(in which you want to push changes)

-1

git init 
#git remote remove origin
git remote add origin  <http://...git>
echo "This is for demo" >> README.md 
git add README.md
git commit -m "Initail Commit" 
git checkout -b branch1 
git branch --list
****add files***
git add -A
git status
git commit -m "Initial - branch1"
git push --set-upstream origin branch1
#git push origin --delete  branch1
#git branch --unset-upstream  


1
コードの説明を追加してください。
Nakx

-4

あなたはBRANCH1にコミットし、変更を失うことなくこのコミットを取り除きたいですか? git resetが必要です。行う:

git branch BRANCH2

BRANCH2を新しいブランチにしたい場合。必要に応じて、これを最後に別のブランチとマージすることもできます。BRANCH2がすでに存在する場合は、このステップを省略します。

次に行います:

git reset --hard HEAD~3

コミットしたブランチのコミットをリセットしたい場合。これは、最後の3つのコミットの変更を取得します。

次に、次のようにして、リセットされたコミットをBRANCH2に移動します。

git checkout BRANCH2

このソースは役に立ちました:https : //git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.