1

根据我的流程,我将新更改推送到我的服务器 new_release 分支,然后服务器上的脚本负责应用新版本。在服务器上执行脚本时,git repo 有两个分支——master 和 new_release。在给定点,脚本执行以下操作:

#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 用于准确显示您所做的事情,因为如果您在不显示实际脚本的情况下描述了您希望它做什么,我就不会明白这一点。很好的问题写作。

您是否从网上复制了该脚本的部分内容?

这不会像您认为的那样做:

git branch –d new_release

那不是-d–d是一个不同的字符(它是一个三字节的 UTF8 字符,而不是 ASCII 45。)所以你创建了一个名为的新分支–d并且有趣的破折号字符没有出现在你的终端上,可能是因为你'没有在您的终端设置中使用 UTF-8 语言环境,所以它只是显示为d. 你不能再次摆脱它的原因git branch -d d是它真的被称为–dnot d

所以要修复脚本,将脚本更改为-d它应该删除分支。

要删除不需要的分支,请尝试:

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

第一个命令在本地删除它,第二个命令远程删除它。这是假设分支名称是“-d”,而不是删除第一个字符的其他东西,但我认为它应该可以工作。

于 2013-01-14T00:25:09.560 回答