私のフローによると、新しい変更をサーバーの 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」ブランチを取り除くのを手伝ってくれますか? それは私の本番サーバーにあります。