1

私のフローによると、新しい変更をサーバーの new_release ブランチにプッシュすると、サーバー上のスクリプトが新しいリリースの適用を処理します。スクリプトがサーバー上で実行された時点で、git リポジトリには master と new_release の 2 つのブランチがあります。特定の時点で、スクリプトは以下を実行します。

#reset changes on the master branch
echo "Resetting master changes..."
git reset --hard HEAD
if [ $? -ne 0 ]; then
    echo "Error: Cannot reset master changes"
    exit 1
fi

#remove untracked files
echo "Removing untracked new files..."
git clean -fd
if [ $? -ne 0 ]; then
    echo "Error: Cannot clean the repository"
    exit 1
fi

#merge changes from new_release into master
echo "Merging master with the new_release..."
git merge new_release --ff-only
if [ $? -ne 0 ]; then
    echo "Error: Cannot merge changes from new_release into master"
    exit 1
fi

#remove new release branch
echo "Deleting the new_release branch..."
git branch –d new_release
if [ $? -ne 0 ]; then
    echo "Error: Cannot remove the new_release branch"
    exit 1
fi

ただし、スクリプトを実行すると、ローカルブランチを削除する代わりに「git branch -d new_release」がそこに残り、「d」という名前の新しいブランチが作成されることがわかります!!

さらに、その新しい「d」ブランチに関する次の出力が表示されます。

$ git branch
* master
new_release
d

$ git branch -d d
error: remote branch 'd' not found.
$ git show-branch d
fatal: bad sha1 reference d

スクリプトで何が間違っていますか? また、誰かがそのエラーから回復してその「d」ブランチを取り除くのを手伝ってくれますか? それは私の本番サーバーにあります。

4

1 に答える 1

2

まず、実際のスクリプトを表示せずに何をしたいのかを説明した場合、私はそれを理解できなかったので、あなたがしたことを正確に示すために+1します。良い質問の書き方.

そのスクリプトの一部を Web からコピーして貼り付けましたか?

これはあなたが思っていることをしません:

git branch –d new_release

それは別の文字ではありません-d(–dこれは ASCII 45 ではなく、3 バイトの UTF8 文字です) という新しいブランチを作成しましたが–d、おかしなダッシュ文字が端末に表示されません。端末設定で UTF-8 ロケールを使用していないため、d. 再びそれを取り除くことができない理由git branch -d dは、実際には–dnotと呼ばれているからdです。

したがって、スクリプトを修正するには、スクリプトをに変更する-dと、ブランチが削除されます。

不要なブランチを削除するには、次を試してください。

git branch -d –d
git push origin :–d

最初のコマンドはローカルで削除し、2 番目のコマンドはリモートで削除します。これは、ブランチ名が「–d」であり、最初の文字を取り除いたものではないことを前提としていますが、うまくいくはずです。

于 2013-01-14T00:25:09.560 に答える