【问题标题】:Removing unnamed git branch删除未命名的 git 分支
【发布时间】:2020-02-24 12:20:33
【问题描述】:

不知何故,我最终得到了这样的项目结构:

> git log --graph --oneline --all

* a72aed6 (master) feat(data:model:user): modified db service
* 099becd feat(data:model:user): added CRUD for user model
* 59ac87d refactor(): separating concerns
* dfb983f chore(data:api): removed graphql testing cruft
* aa92817 feat(data:db): setup pg pool connection and query in db/index.ts
* ee03d48 feat(wf): added express
* 184cef0 feat(data:db): added pg
| * 32aedba chore(data:api): removed graphql testing cruft
| * a6825d2 feat(data:db): setup pg pool connection and query in db/index.ts
| * 4a901b1 feat(wf): added express
| * e5753c5 feat(data:db): added pg
|/
* 94426bc (HEAD) feat(qc:test:jest): added test coverage script
* 6126689 feat(build:deploy): added webpack typescript integrations
* 172da85 feat(build:deploy): added webpack-cli
* bab6afa feat(qc): added husky
* c570f33 feat(vcs): added git

我已经尝试了所有方法(reset --hardcherry-pickrebase -i, drop 等)来删除提交 e5753c532aedba,这些提交错误地显示为 4 次提交的重复,而我正在赶一部分项目的最后期限:)

我可以执行什么命令来实现以下输出:

> git log --graph --oneline --all

* a72aed6 (master) feat(data:model:user): modified db service
* 099becd feat(data:model:user): added CRUD for user model
* 59ac87d refactor(): separating concerns
* dfb983f chore(data:api): removed graphql testing cruft
* aa92817 feat(data:db): setup pg pool connection and query in db/index.ts
* ee03d48 feat(wf): added express
* 184cef0 feat(data:db): added pg
* 94426bc feat(qc:test:jest): added test coverage script
* 6126689 feat(build:deploy): added webpack typescript integrations
* 172da85 feat(build:deploy): added webpack-cli
* bab6afa feat(qc): added husky
* c570f33 feat(vcs): added git

我尝试过的之前和之后的示例:

git checkout 32aedba
git rebase -i 94426bc
# `drop` to the above commits

git log --graph --oneline --all
# Returns as above, with HEAD at 94426bc
git checkout 32aedba
git reset --hard HEAD~4
# `drop` to the above commits

git log --graph --oneline --all
# Returns as above, with HEAD at 94426bc

【问题讨论】:

  • 尝试将 --decorate 添加到您的日志命令中,看看它是否会列出使这些提交保持活动状态的分支。
  • @LasseV.Karlsen 谢谢你的建议——我试过了,但在这种情况下没有任何效果。我相信这是因为标签而不是分支
  • @NickBull: --decorate 应显示可通过标记访问的提交,例如 * a123456 (tag: v1.2) commit subject line here
  • @torek 你是对的!我像傻瓜一样从上面的输出中省略了标签:p

标签: git rebase cherry-pick


【解决方案1】:

首先,陈旧的分支不会造成任何伤害,所以我不清楚你的目标。只是介绍吗?如果是,您可以只输出master with

git log --graph --oneline master

但是让我们接受这个前提:如何摆脱不需要的提交?

您必须找到提交 32aedba 上的哪些引用,类似于

git branch --contains 32aedba

然后删除这些分支

git branch -D <branch>

-D 而不是-d,因为它将被取消合并并需要强制)

另一种选择(参见 Lasse 的评论)是在您的命令中输出 refs

git log --graph --oneline --all --decorate

【讨论】:

  • 我不确定,主要是因为我的 Git 工作流程搞砸了,但我相信它与上面非常相似 - 当我删除分支上的标签时,分支消失了。假设这与您发布的原因相似。你是对的,陈旧的分支不会造成任何伤害,但是许多陈旧的分支可能会令人困惑!
  • @NickBull:在 Git 中,标签不在 branches 上,而是在 commits 上。事实上,几乎所有内容都在提交上——分支名称和标签名称仅适用于微不足道的人类。 :-) 在任何情况下,一旦您删除 all 可以找到某些提交的名称,您将停止查找这些提交。这里的关键概念是可达性。见think-like-a-git.net
  • @torek 很棒的资源!谢谢你:)
【解决方案2】:

git push origin --delete [branchName] 删除远程分支

【讨论】:

    猜你喜欢
    • 2010-11-14
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多