4

Git デプロイメント スクリプトを作成しようとしていますが、スクリプトは複数のサーバーを更新する必要があり、それらすべてが同じ Git ブランチにあるわけではありません。理想的には、スクリプトには、「git reset --hard origin/whateverBranchThisServerIsOn」の効果をもたらすコマンドが 1 つだけ必要です。

今、私はできることを理解しています:

git reset --hard origin/foo

私のgit環境をリモートのfooブランチにリセットします。ただし、私がやりたいのはリモートブランチにリセットすることですが、具体的には「foo」ではなく、「マシンが現在チェックアウトしているブランチのリモート(つまり、実行時にどのブランチが表示されるかgit branch)」だけです。

私はもう試した:

git reset --hard origin

と:

git reset --hard origin/HEAD

と:

git reset --hard HEAD

しかし、それらはすべて他のブランチをチェックアウトするか、(最後のケースでは) リモート コミットを取得しません。確かに言い方はありgit reset --hard origin/CURRENT_BRANCHますか?

4

4 に答える 4

6

「チェックアウトしたブランチ」という考えは、少し形式が正しくありません。そのようなブランチ間の 1 対 1 の関係はありません。ブランチに「オリジン」がまったくない場合があります。ただし、リモート追跡ブランチを持つことができます。これは、現在の名前と同じ名前である場合もあれば、そうでない場合もあります。を読んman gitrevisionsで、あなたが望むことをするために指定HEAD@{upstream}がうまくいくはずです。しかし、私はそれをテストしていません。

于 2012-10-02T22:55:24.503 に答える
3
# simple script to reset hard to the current branch origin
branch=$(git symbolic-ref --short -q  HEAD)
echo "Sure to reset hard to origin/$branch ?"
read
git reset --hard origin/$branch
于 2015-02-19T09:05:10.383 に答える
0

「現在チェックアウトしているものは何でも」という名前になりHEADます。そのgit reset --hard HEADため、保持したくないと判断した変更を行う前にチェックアウトしたものに戻ります...

あなたが現在いるブランチには上流に相当するものがあるかもしれないし、ないかもしれないので、あなたが説明していることをやみくもに達成するための単一のコマンドがあるかどうかはわかりません. git branch出力を解析し、どのリモート ブランチを使用するかを決定するシェル スクリプトを少し書くこともできます。予期しないものを見つけた場合は終了することもできます。

于 2012-10-02T21:55:25.927 に答える