【问题标题】:Undo Gerrit push on GitLab在 GitLab 上撤消 Gerrit 推送
【发布时间】:2021-08-19 13:47:37
【问题描述】:

我不小心对 GitLab 存储库进行了 Gerrit 风格推送。

也就是说,当我在本地分支时,我这样做了:

$ git push origin HEAD:refs/for/master
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 3.06 KiB | 184.00 KiB/s, done.
Total 4 (delta 2), reused 0 (delta 0), pack-reused 0
To gitlab.domain-name.com:project-name.git
 * [new reference]   HEAD -> refs/for/master

当我应该做的事情很简单时:

$ git push -u origin branch-name

据我所知,此参考并未显示在 GitLab Web GUI 上的任何位置。

如何撤消此操作?我需要吗?

【问题讨论】:

    标签: git gitlab git-reflog


    【解决方案1】:

    您可以使用以下命令删除遥控器上的引用:

    git push -d origin refs/for/master
    

    完整演示:

    $ git ls-remote
    From git@gitlab.domain.tld:repository.git
    9379c44dc1925987c6d2ebdd62e2c91435cf3c8a    HEAD
    9379c44dc1925987c6d2ebdd62e2c91435cf3c8a    refs/heads/master
    
    $ git push origin HEAD:refs/for/master
    Enumerating objects: 4, done.
    Counting objects: 100% (4/4), done.
    Delta compression using up to 8 threads
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 286 bytes | 286.00 KiB/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    To gitlab.domain.tld:repository.git
     * [new branch]      HEAD -> refs/for/master
    
    $ git ls-remote
    From git@gitlab.domain.tld:repository.git
    9379c44dc1925987c6d2ebdd62e2c91435cf3c8a    HEAD
    a5b0640960e5a1f26e784d2f93f94f0ec29d5f51    refs/for/master
    9379c44dc1925987c6d2ebdd62e2c91435cf3c8a    refs/heads/master
    
    $ git push -d origin refs/for/master
    To git@gitlab.domain.tld:repository.git
     - [deleted]         refs/for/master
    
    $ git ls-remote
    From git@gitlab.domain.tld:repository.git
    9379c44dc1925987c6d2ebdd62e2c91435cf3c8a    HEAD
    9379c44dc1925987c6d2ebdd62e2c91435cf3c8a    refs/heads/master
    

    【讨论】:

      【解决方案2】:

      Git refspec 使用两个 ref (source)

      • refs/heads 跟踪当地分支机构。
      • refs/remotes/ 跟踪远程分支。

      refs/for/ 是 Gerrit 特定的命名空间,因此不应影响您的 repo,因为您没有使用 Gerrit 服务器。 (source)

      【讨论】:

      • 除了@Matt 的回答中的方法之外,这是很棒的上下文信息,谢谢 Amit!
      猜你喜欢
      • 2022-01-16
      • 2012-04-27
      • 2014-05-06
      • 1970-01-01
      • 2020-07-08
      • 1970-01-01
      • 2012-11-08
      • 2011-08-22
      • 1970-01-01
      相关资源
      最近更新 更多