如何在本地和远程删除Git分支
控制版本控制空间的一个工具就是GiT。
其受欢迎和被采用的原因有很多。
它本质上是分布式的,它是分散的,我们几乎可以在本地执行所有操作(这意味着仅在进行更改时才需要连接)。
git提供的另一个杀手级功能是“分支”。
尽管许多其他版本控制工具都提供了分支功能,但没有一个以git实现它的方式实现分支(这是非常轻量级的)。
与其他版本控制工具不同,在Git中,分支之间的切换非常快。
本文将深入探讨git中分支的删除操作。
不同的人对删除分支有不同的看法。
话虽如此,git用户之间的常见做法是删除已合并到主线开发中的分支(在大多数情况下为master分支。
这取决于git存储库结构。
)
删除分支是一个好主意,因为…
- 它减少了存储库中的混乱情况
- 一旦将我们从分支的更改合并到开发的主线中,它实际上就毫无用处,除非我们积极地将其用于进一步的开发。
话虽如此..请记住删除分支不会提高性能或者磁盘利用率(这是因为git分支只不过是指向特定提交ID的指针,即指向创建新分支的源分支的最后一个提交ID。
)
让我们创建一个包含少量测试文件的存储库,并创建和删除一些分支。
克隆存储库并创建几个分支
下面将克隆一个名为“ test-repo”的现有存储库。
好吧,这是我创建的用于纯粹说明目的的存储库。
它只有一个分支(即默认分支主节点),并且在该分支中有2个提交。
$git clone https://gitlab.example.com/sarath/test-repo.git Cloning into 'test-repo'... remote: Counting objects: 6, done. remote: Compressing objects: 100% (3/3), done. remote: Total 6 (delta 0), reused 3 (delta 0), pack-reused 0 Unpacking objects: 100% (6/6), done.
克隆存储库后,让我们进入test-repo目录,并查看我们所在的提交和当前分支。
$git log --oneline 0807c9a (HEAD -> master, origin/master, origin/HEAD) Adding test files a b c ebd0b69 Initial commit
HEAD指向master,意思是我们现在在master的分支里面。上面的命令还向我们展示了这个主分支中有两个提交,以及它们各自的提交消息。
现在让我们在该存储库中创建一个分支。
这可以通过运行以下命令来实现。
$git checkout -b testbranch1 Switched to a new branch 'testbranch1'
上面显示的命令将创建一个名为testbranch1的分支,并将我们带入该新分支。
从现在开始所做的任何工作都将成为这个新分支的一部分。
实际上创建一个分支并进入该分支是两个单独的命令。
命令“git branch testbranch1”将创建分支命令“git checkout testbranch1”将带您进入该分支命令“git checkout-b testbranch1”是创建分支并进入新分支的快捷方式-基本上是一个命令而不是上面两个命令。
通过运行以下任何命令,可以确认我们是否确实在新分支内。
HEAD现在应该指向testbranch1,而不是我们前面看到的master。
$git log --oneline 0807c9a (HEAD -> testbranch1, origin/master, origin/HEAD, master) Adding test files a b c ebd0b69 Initial commit $git branch master * testbranch1
现在,让我们进行一些更改并进行提交。
$touch d e f $git add . $git commit -a -m "Adding test files d e f" [testbranch1 1a0751b] Adding test files d e f 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 d create mode 100644 e create mode 100644 f $git push origin testbranch1 Counting objects: 2, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 297 bytes | 297.00 KiB/s, done. Total 2 (delta 0), reused 0 (delta 0) To https://gitlab.example.com/sarath/test-repo.git * [new branch] testbranch1 -> testbranch1
如上图所示,我们创建了3个新的测试文件,添加并提交了它们,然后推送了它。推送操作将在远程存储库中创建这个新分支及其相关历史记录。
一旦将testbranch1的更改合并到master分支,就应该能够从本地以及远程删除testbranch1,因为如果以后不进行任何操作,这将毫无用处。
让我们继续进行,将我们的testbranch1合并到master。
这可以通过首先切换到master分支,然后执行merge命令来完成。
见下文。
$git checkout master $git merge testbranch1
如果您使用的是github或gitlab之类的东西,那么不允许在没有请求和检查的情况下直接合并。我这里没有使用任何pull请求和检查过程,因为这纯粹是为了说明。
现在我们的master分支应该具有testbranch1的所有更改。
现在,我们可以从本地以及远程删除我们的testbranch1.
如何在本地删除GiT分支?
我们可以通过使用-d选项执行git branch命令来在本地删除git分支。
请记住,这只会从本地存储库中删除该分支。
见下文。
$git branch -d testbranch1 Deleted branch testbranch1 (was 1a0751b).
上面显示的命令有一个有趣的方面。如果分支(testbranch1)的内容被合并到创建它的原始分支(在我们的例子中是主分支),它将只删除该分支
如果所做的更改未合并到创建时所在的原始分支中,则会引发如下所示的错误。
error: The branch 'testbranch1' is not fully merged. If you are sure you want to delete it, run 'git branch -D testbranch1'
正如上面的输出中所提到的,您仍然可以使用-D选项强制删除具有尚未合并的更改的分支。
如何删除GiT远程分支?
如前所述,上面显示的方法只会从本地存储库中删除分支。
要使用命令行从远程存储库中删除分支,我们需要执行git push命令,如下所示。
$git push origin :testbranch1 To https://gitlab.example.com/sarath/test-repo.git - [deleted] testbranch1
另外,我们也可以执行以下命令,执行相同的操作。
$git push origin -d testbranch1 To https://gitlab.example.com/sarath/test-repo.git - [deleted] testbranch1
要记住的一件重要事情是。如果有服务器或其他计算机正在跟踪此存储库(我们从中删除了一个分支),则它们必须再次克隆存储库,或者使用git fetch命令执行修剪操作。