在脚本中删除本地git分支会出现意外行为

时间:2013-01-14 00:20:54

标签: git branch

根据我的流程,我将新的更改推送到我的服务器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”分支吗?它在我的生产服务器上。

1 个答案:

答案 0 :(得分:2)

首先,+1表示完全你做了什么,因为如果你在没有展示的情况下描述了你想要的,我就不会想到它实际的脚本。写好问题。

您是否从网上复制了“脚本”这个脚本?

这不符合你的想法:

git branch –d new_release

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

因此,要修复脚本,请将脚本更改为d,并删除分支。

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

-d

第一个命令在本地删除它,第二个命令远程删除它。这是假设分支名称是“-d”而不是其它已剥离出第一个字符的东西,但我认为它应该有效。