旧的远程别名仍然可以在git日志和gitk中看到,如何删除?

时间:2014-04-02 08:32:23

标签: git git-remote

我最近将一个遥控器重命名为一个新的别名,旧的别名(及其所有提交,直到重命名)仍然在日志中显示,因此gitk。运行

$ git remote show old-alias 

显然会回归:

fatal: 'old-alias' does not appear to be a git repository

这很烦人。如何清除这些参考文献?如果我手动删除

,可以
.git/logs/refs/remotes/old-alias/
.git/refs/remotes/old-alias/

目录?

修改

以下是git remote -v输出:

origin  git@github.com:my-user/our-repo (fetch)
origin  git@github.com:my-user/our-repo (push)
upstream        git@github.com:upstream-user/our-repo (fetch)
upstream        git@github.com:upstream-user/our-repo (push)

以下是git log --oneline --graph --decorate输出:

* 692d53f (HEAD, origin/somebranch, somebranch) Commit message                                                                                                                                 
* 9a4e794 Commit message                                                                                                                                                     
* 419376b Commit message
* 9a945bd (origin/someotherbranch, someotherbranch) Commit message
* 9a0fe3b Commit message
* 021d553 Commit message
* fa60dba Commit message
* 2d52d72 Commit message
* c59307f Commit message
* b89ae1c Commit message
* 063030c Commit message
* 97b8c77 Commit message
* ec65002 Commit message
* 38d7bb8 Commit message
* 36856fc Commit message
* 13b5065 Commit message
*   66e7dae (upstream/master, origin/master, old-alias/master, master) Commit message
|\  
| * caf7e86 Commit message
| * a0c5abe Commit message
| * 9d1a735 Commit message
| * 4e7770d Commit message
| * cd3dd89 Commit message
* |   3037432 Merge pull request message
|\ \  
| |/  
| * 12b4a01 Commit message
| * be41159 Commit message
|/  
* 8210859 Commit message
* 6b2090e Commit message
* 4b069f3 Commit message
*   1ef939c Merge pull request message
|\  
| * fc559bb Commit message
|/  
* 6fab424 Commit message
* ce10b38 Commit message
* 345128e Commit message

old-alias已通过origin围绕提交2d52d72更改为git remote rename old-alias origin

2 个答案:

答案 0 :(得分:2)

此处的问题也存在类似问题:Why is old name of git remote sill in .git/refs/remotes?。根据那里的建议,我删除了

.git/logs/refs/remotes/old-alias/
.git/refs/remotes/old-alias/
手动

目录。 .git/logs/HEAD.git/logs/refs/heads/someotherbranch中有剩余日志:

./logs/HEAD:14:6d8019... Ayberk Özgür <ayberk.ozgur@email.com> 1394819391 +0100   pull old-alias someotherbranch: Fast-forward
./logs/refs/heads/android:13:6d8019... Ayberk Özgür <ayberk.ozgur@email.com> 1394819391 +0100     pull old-alias someotherbranch: Fast-forward

我不确切知道这些是old-alias剩下的唯一痕迹,还是它们可能有害。但是,到目前为止我还没有遇到任何问题。

答案 1 :(得分:0)

首先,我最终得到了什么:

export REMOTE_NAME="old-alias" # insert your remote name
for branch in $(git branch -a | grep -o "${REMOTE_NAME}/.*") ; do
    git branch -r -d $branch
done

我有一个非常类似的问题,尽管即使在我的.git目录中鲁莽地删除内容后 - 可能不这样做! - 我还有远程参考资料。

对我来说,诀窍是使用-r选项来删除git分支:git branch -r -d,如bitoiu所建议的那样(在引用的答案中)。

我将此与git br -a结合使用,因为我有〜20个孤立的远程分支,我想循环遍历它们以删除它们。

我希望因为读者有git,grep只有-o选项才能返回匹配的子字符串。如果没有,请使用您选择的工具修剪前导remotes/,例如我在QNX上使用的| sed -e 's/^remotes.//'(尽管我在QNX上没有git)。

最后,如果你更喜欢一个衬里,那么值得学习sh / bash for循环单行语法:for branch in $(git branch -a | grep -o "old-alias/.*") ; do git branch -r -d $branch ; done