2014-10-09 128 views
-1

我使用git-svn导入了主干和从svn到git的分支。我把它们都放在git中,但分支站在自己身边,并不指向干线。下面是它的外观图形:合并并删除git中的远程分支

a<--b<--c<--d 
     \ \ 
      \ (master)(remotes/trunk) 
      \ 
      (remotes/feature1) 

a<--b<--c<--d<--e 
       \ 
        (remotes/branches/feature1) 

我想是有遥控器/分支机构/特征1合并,遥控器/特征1和删除遥控器/分支机构/特征1所以,这将是:

a<--b<--c<--d 
     ^ \ 
      \ (master)(remotes/trunk) 
      \ 
      e' (remotes/feature1) 

我该如何做到这一点?我搜索了很多,但没有得到我想要的结果。

+0

我不知道git-svn是如何工作的。您是否有两个存储库,其中“主”是指本地分支,“远程/特征1”是指来自远程的参考?或者他们都是当地的分支机构? – 2014-10-09 20:51:09

+0

在git-svn完成导入之后,它位于同一本地存储库中。带有远程前缀的分支被列为远程分支,并且可以使用'git branch -r'列出。 – rageit 2014-10-10 13:04:44

+0

ok - 当你说'删除遥控器/分支/功能1'时,你的意思只是在这个存储库中的引用,并注意到实际远程的参考?我会假设 – 2014-10-10 13:12:54

回答

0

请注意,在你的第二张图中,你最终会得到e'not e。每当你改变亲子关系时,即使引入的内容相同,你也会得到一个新的沙子。

我猜你只是在当地的回购协议中做东西,而不需要在上游做出改变?如果是这种情况,那么你可以选择移动sha,在分支指针上做一些强制更新。

git checkout -b new_feature1 
git cherry-pick e 
git update-ref remotes/feature1 HEAD 
git update-ref -d remotes/branches/feature1 

如果您确实需要在远程进行更改,那么您绝对不会想要执行update-ref。您必须改为使用git push -f new_feature1:feature1git push --delete

+0

我用樱桃采摘。 – rageit 2014-10-10 18:55:37