2013-04-11 17 views
26

masterから作成されたhotfixesブランチがあるとします。 hotfixesにコミットを追加しましたが、これらのコミットは役に立たなかったので、今度はmasterの新しいコピーから開始したいと考えています。gitでブランチを別のブランチにリセットするには?

良く明確にする、これは参照ワークフローです:http://nvie.com/posts/a-successful-git-branching-model/

はのはまた、我々はひどいセットを持っており、それが何かをテストするための唯一の方法ですので、我々がする必要があるので、我々は、リモートoriginhotfixesを押したとしましょうブランチをリモートサーバー上でもリセットします。

hotfixesmasterのコピーにリセットするにはどうすればよいですか?

答えて

29

ローカルmasterをリモートhotfixesブランチにプッシュしたいのですか?このように:

git push origin +master:hotfixes 

ただし、リモート側で履歴を書き換えることが許可されている必要があります。

+0

これは正しい構文ですか?私がこれをしたとき、私はその名前にプラス(+)の新しいリモートブランチを持っていました。私はプラスを 'git push origin + master:hotfixes'のように動かさなければなりませんでした。これは、gitの仕様に従っています:http://git-scm.com/docs/git-push – jwynveen

+0

@jwynveenあなたは正しいと思います。 –

+6

fyiの場合、プラス記号はプッシュ中に '--force'を実行するための省略形です:http://stackoverflow.com/questions/1475665/why-git-push-helloworld-mastermaster-instead-of-just-git- push-helloworld –

6

私があなたの質問を正しく理解していれば、の現在のリビジョンを指すようにorigin/hotfixesのブランチポインタを移動する方法があります。

それがケースである場合は、コマンドのこれらのセットは(すでにローカルのGitのレポに過去の任意の時間をhotfixesをチェックアウトしたと仮定した場合)動作するはずです:

# git branch -f does not allow modifying the currently checked out 
# branch, so checkout any other branch than hotfixes 
git checkout <SOME_OTHER_BRANCH_THAN_HOTFIXES> 

# Move the branch pointer of hotfixes to the commit currently 
# pointed by origin/master 
git branch -f hotfixes origin/master 

# Force push the history rewrite in the hotfixes branch 
# into origin 
git push -f origin hotfixes 
+0

'ブランチホットフィックスは、リモートブランチマスタを起点から追跡するように設定されています。 - それがすべてで欲しいとは確信していません。 –

36

これは私がそれをやった方法です基本的なGitのコマンド:もちろん

git checkout hotfixes 
git reset --hard master 
git push --force origin hotfixes 

それは誰もがhotfixesに取り組んで通知することが重要です。ほとんどの場合、ローカルコピーを削除して新鮮なものから開始する必要があります。

+0

私はこの方法がより好きです。エラーの発生が少なくなります。 –

+0

環境設定のおかげでありがたいですが、なぜエラーが起こりにくいのかがわかりました – danza

+1

私はそれが個人的な好みであり、事実を述べようとしていないと述べていたはずです。 私には、より多くのアクションが必要です。これは、あなたが何をしているのかをよりよく記述し、別のリモートにプッシュするだけで、自分が何をしているのかをよりよく知ることができます。 また、余分な '-f'フラグと' reset -hard'は、例えばsourcetreeのようなGUIツールで警告します。 –

1

ここでの回答は固いものです。ステージングブランチをマスタにリセットするときに、この正確な変更が必要でした。その場合、私はマスターを一致させるために起点をリセットし、それに合わせて私のローカルをリセットしたいと思います。ですから、ブランチ名を渡して、両方のコマンドを1回の操作で実行できるgitエイリアスがあります。

git reorient hotfixes 

上記の答えは完全に正しかった:そして、それが好き使用

reorient = "!f() { git push origin +master:$1 && git reset --hard origin/$1 ; }; f" 

(それは少し危険です)。しかし、これは単純にキーストロークを減らし、より迅速な処理を可能にします!それが役に立てば幸い。

+0

エイリアスに 'git reset -hard'を簡単にラップしません。重要な変更を忘れて失うことを恐れてください。 – danza

+1

うん。私が説明したように、「少し危険です」。しかし、特定の場合には、定期的にこれを行うことができます。その場合、より迅速なものが必要な場合があります。 –

関連する問題