我今天在这里发帖的原因是因为我在命令行上看到的行为与我实际在网上阅读的行为不同。所以这让我很困惑。
这里有问题的两个命令是:
git branch -r -d origin/topic1
Run Code Online (Sandbox Code Playgroud)
和
git push origin :topic1
Run Code Online (Sandbox Code Playgroud)
到目前为止我的理解(不过我可能完全错了,我的大脑已经炸了):
这是我最近遇到的一个场景。我刚刚克隆了一个具有两个远程分支的存储库:
origin/master
origin/develop
Run Code Online (Sandbox Code Playgroud)
我唯一的本地分支机构是:
master
Run Code Online (Sandbox Code Playgroud)
我想删除远程分支origin/develop,所以请注意:
Robert@COMP /c/Code/project (master)
$ git branch -rd origin/develop
Deleted remote branch origin/develop (was 9ff16e8).
Robert@COMP /c/Code/project (master)
$ git fetch
From github.com:username/project
* [new branch] develop -> origin/develop
Run Code Online (Sandbox Code Playgroud)
如您所见,我尝试删除远程分支,并立即从源获取最新更改,但由于某种原因它重新创建了分支。我不知道为什么会这样做,我很困惑。我没有本地对应的分支origin/develop,所以我不知道它为什么这样做。
我想知道为什么会发生这种情况,而且(为了解决这个问题的更一般的标题,也许可以帮助其他人清理堆栈溢出以找到这些令人困惑的歧义的答案),我想对一些问题有更一般的答案:
从远程克隆回购后,我在master分支上。键入git branch以查看分支列表时,仅master在列表中。
随着时间的流逝,检出现有分支并创建新分支,最终将新工作合并到master并推向origin。现在,键入将git branch显示包含数十个分支的长长列表。
如何缩小列表,从列表中删除特定分支,同时将其他分支保留在列表中?
更新1:为澄清起见,我不希望从存储库中删除任何分支(绝对不是从远程存储库中删除)。只是使在给定时间我经常使用的分支子集之间导航变得更加容易。
更新2:考虑-
$ git clone myrepo
$ git branch
* master
$ git checkout mybranch
$ git branch
master
* mybranch
$ git checkout master
$ git branch
* master
mybranch
$ git "I'll not be dealing with mybranch for 91 days, do something to clean the list"
$ git branch
* master
(playing DOOM for 91 days)
$ …Run Code Online (Sandbox Code Playgroud) 这是场景:有人有一个我已经分叉的 git 存储库(如果重要的话,在 github 上)。在我的分支中,我创建了许多分支,其中包含上游已拉取的更改。或者在某些情况下应用我的分支的差异而不是正确拉动分支。
我想要找到的是我所有分支的列表,这些分支已经完全合并到上游主分支中。这样我就可以安全地删除这些分支,因为git branch其他工具列出了 30 多个分支,而且看起来很杂乱。
我想我正确地解释了为什么这个问题与链接的问题不同:或者在某些情况下应用了我的分支的差异而不是正确地拉动分支例如git branch --merged不是一个完整的答案,但是哦......
任何人都可以帮我弄清楚.gitconfig文件中这行的错误吗?
[alias]
db = !git branch --merged | grep -v "\*" | xargs -n 1 git branch -d
Run Code Online (Sandbox Code Playgroud)
该命令本身有效,我正在关注这篇文章(如何删除已合并的所有git分支?)
但是,当我运行别名'git db'时,它将失败并出现'fatal:bad config file line 22',它指向我的.gitconfig文件中的那一行
为了进一步解决这个问题- 有没有办法删除所有在基于 master 时没有差异的分支。
虽然该问题的答案适用于标准合并工作流程,但它不会选取上游已“压缩和合并”的分支。因为这些分支在合并之前已被压缩,所以它们没有相同的提交哈希值,因此 git 没有意识到它们已“有效”合并:
$ git branch feature -d
error: The branch 'feature' is not fully merged.
If you are sure you want to delete it, run 'git branch -D feature.
Run Code Online (Sandbox Code Playgroud)
但如果我们首先对分支进行变基,它会毫无怨言地删除它们:
$ git checkout feature
Switched to branch 'feature'
Your branch is based on 'origin/feature', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
$ git rebase develop
First, rewinding head to replay your work on top of it...
$ git …Run Code Online (Sandbox Code Playgroud) 我正在整理我的仓库,并想删除一些不再使用的旧分支。有很多有关如何删除这些信息。但是,我不确定这些解决方案对我来说是否安全,因为我使用合并了分支--no-ff。
想象一下我的日志看起来像这样:
master *--*--*--------*--*--*--*
\ / /
\ / |
feature_a *--*--* |
\ |
\ /
feature_b *--*--*
Run Code Online (Sandbox Code Playgroud)
问题:如何删除feature_a和feature_b分支而不丢失数据和日志结构?
基本上,我想那git branch只是回报*master,并在日志曲线看起来仍然像上面(的即没有改写的提交feature_a和_b到master)。
首先,我发现了有关清理遥控器旧分支的其他问题.
我真正喜欢的是一个命令,它查找所有已合并且超过某个阈值(例如2周)的分支.然后删除该本地和远程分支.
有关如何做到这一点的任何想法?