2016-06-24 14 views
1

2週間前に新しいブランチを作成しました。それをexpとしましょう。この間、expmasterの両方にいくつかのコミットがありました。この間expは今、私は私の全体の歴史を失うことなく、マスターにexpからのすべての変更を取得したい(つまり、私はちょうど1がでmasterにコミットしたくないmasterGit rebase/masterがブランチからマスターに変更されました

からの変更で更新されていませんすべての変更は、むしろexpのすべてのコミットがmasterの履歴に表示されます)

これはどのように可能ですか?私はRebaseに見てきたが、私が行うとき:

git checkout exp 
git rebase master 

プロセスの終わりに、私はexpにと私は私がにそれらをプッシュしたかったかのように私はexpに行ったすべてのコミットを見るgit statusときexpもう一度

+0

なぜリベース?どうして合併しないの? – kan

答えて

2

あなたの目標は、masterの歴史にexp内のすべてのコミットを持っており、あなたのコミットのすべてを保持することです。 git mergegit rebaseのどちらを使用するかにかかわらず、これを達成できます。

MERGE:

git checkout master 
git pull 
git checkout exp 
git merge master 
git push -u origin exp 

メイクは、あなたが最新のmasterを引くと、最新の変更を持っているので、ステップ2を実行します。

REBASE:

git checkout exp 
git pull --rebase origin master 
git push -u origin exp 

あなたがプロセスにmasterあなたの地元を更新したくない場合は、代わりに次の手順を実行することができます。

git checkout master 
git pull 
git checkout exp 
git rebase master 
git push -u origin exp 

注意するときにgit pull --rebase origin masterこと、あなたは最新のバージョンoriginmasterに基づいて変更を行っています。また、このコマンドはローカルコピーmasterを更新しません。

注記:git rebaseを使用している場合は、強制的にプッシュ(git push -f origin exp)する必要があります。

1

expブランチをmasterにマージすることをお勧めします。あなたはまだあなたのすべての歴史を持っていて、ボーナスとしてあなたは元のコミットタイムをすべて保持します。

git checkout master 
git merge exp 

あなた本当には、あなただけのmasterにあなたのリベースexpブランチをマージする必要があり、rebaseオプションと一緒に行きたい場合。

git checkout exp 
git rebase master 

git checkout master 
git merge exp 

注:マージ(最初の)オプションを使用すると、あなたの枝は、おそらく分岐しているので、あなたは(あなたのマージのための追加的なコミット)無早送りマージで終わるでしょう。あなたがGitHubのプルリクエストユーザであれば、この種のマージを使用します。 2番目のオプション()で同じ操作を行う場合は、オプションをmergeコマンドに追加できます。

git merge exp --no-ff 
関連する問題