2017-07-12 3 views
0

これはしばしば「同じコミットで2つのgitブランチを取得するにはどうすればいいですか?」というやや異なるバージョンです。2つのリモートgitブランチが同じコミットを指し示すようにするにはどうしたらいいですか?

私はの2つのリモート gitブランチをorigin/Aとorigin/Bといいます。どちらも遠隔で、両方が他の人によって使用されています。通常の起源/ Bは、原点/ Aの後ろに従いますが、簡単に追いつくために高速転送することができます経由:

git checkout -t origin/B 
git merge origin/A 
git push 

すべて一度しばらくの間では、我々は一時的起源/ Bにユニークなものをコミットします。最終的にorigin/Bの内容はorigin/Aと再同期します。しかし、これが起きた後、origin/BのHEADは、origin/Aとは異なる物理コミットであり(内容はdiff-identicalであっても)、origin/Aに早送りすることはできません。

この時点でorigin/Bのポイントを元の/ AのHEADに戻すためのクリーン/正しい方法は、将来のマージを早急に行うことができますか?私は枝の歴史について特に気にしない。

私はこれをローカルブランチ上でrebaseで修正できますが、リモートブランチを削除して再作成することもできますが、これらの両方がリモートブランチの他のユーザーを傷つけると思います。

良い方法がありますか?

+1

ローカルブランチではなくリモートブランチの管理に専念するのはなぜですか? – Nayuki

+0

この問題は、互いの最新の状態になるまで、一方のブランチを他方のブランチをマージまたはリベースするだけで最も効果的です。 –

+0

ブランチを使用してリリースを管理します。私はrebaseがローカルブランチで問題を解決すると考えていますが、ドキュメントでは、これをプッシュすると、リモートブランチが既にチェックアウトされている他のユーザーには何か悪いことが起こります。私がそれをする重大さを誤解していない限り? – DanJ

答えて

1
git push origin --force origin/A:B 

これは、これはプッシュで、origin/Bのオフに基づいて、任意の枝はもはやorigin/Aブランチに存在しないコミットを含むことorigin/A

注意としてコミット同じになるようにorigin/Bを設定します。

+0

ああこれは私が望むように見える。 1つの質問:他のユーザーがこの後に「引き出す」ときにはどうなりますか?それは古い支店の彼らの立場から新しい起源/頭部まできちんと引っ張るだろうか? – DanJ

+0

この後の 'origin/B'からの引っ張りは' origin/A'からの引っ張りと同じになります(同じコミットを参照するため)。 'git pull $ branch'は基本的に' git fetch && git merge $ branch'です。 –

+0

これを試してみましたが、このエラーが出ました。私は最新で、git pullは役に立たない:git push origin - force origin/A:B 合計0(デルタ0)、再使用0(デルタ0) リモート:エラー:非拒否-fast-forward-refs/heads/B(最初にプルする必要があります) host:/ git/repo ! エラー:いくつかのリファレンスを 'host:/ git/repo'にプッシュすることができません – DanJ

関連する問題