首页 > 编程知识 正文

git切换本地分支命令(git怎么切换到别的分支命令)

时间:2023-05-06 01:40:09 阅读:90085 作者:19

比较Git中切换四个分支的方法的优缺点。

经常使用Git的人都会以某种形式使用上下文开关。 这只会给你的工作流程增加少量的开销,但有时可能是痛苦的经历。

让我们用以下示例来说明常见的上下文切换策略的优缺点。

假设你在一个叫feature-X的分支工作。 我刚意识到有必要解决无关的问题。 这不能在功能- x分支上进行。 必须在新的分支功能中完成此任务。

方案 1:暂存 + 分支

解决此问题最常见的工作流程如下:

停止在分支功能- x上工作,狠狠地揍gitstashgitcheckout-b功能原点/主,以解决功能- y的问题

缺点:使用此工作流时,一次只能有一个工作区。 另外,根据你仓库的状态,使用舞台是麻烦的一环。

方案 2:WIP 提交 + 分支

解决方案与上一个解决方案非常相似,但使用正在进行的工作进度(WIP )而不是转移来提交。 当hxdmd准备切换回来而不是弹出转移时,git reset HEAD~1将展开WIP提交。 虽然可以像之前的方案一样自由地继续,但是不会接触舞台。

git add -u (仅添加已更改和已删除的文件) git commit-m ' WIP ' git check out-b feature-y origin/master,停止在分支功能- x上工作,其原因是: git checkout feature-X或git switch -git reset HEAD~1的优点:对于简单的更改,这是一个简单的工作流程,也适用于小型仓库。 不需要使用暂时保存。

优点:一次只能拥有一个工作区。 此外,如果您或您的代码审阅人不小心,WIP提交可能会集成到最终产品中。

使用此工作流时,请不要将--hard添加到git reset中。 如果这样做了,应该可以使用git reflog重新开始提交,但是最好完全避免。 否则,会听到心碎的声音。

方案 3:克隆一个新仓库

此解决方案不创建新分支,而是为每个新功能分支创建存储库的新克隆。

好处:可以同时在多个工作区工作。 你不需要提交git stash和WIP

缺点:由于可能会占用大量磁盘空间,因此必须考虑仓库的大小。 (浅克隆有助于解决这种情况,但可能不一定合适。 另外,你仓库的克隆人互相不知道。 他们无法互相追踪,所以必须手动追踪克隆人的源仓库。 如果需要git挂钩,则必须为每个新克隆设置。

方案 4:git 工作树

要使用此解决方案,您可能需要了解“添加工作树”。 如果您不熟悉Git工作树,请不要难过。 很多人多年来都不知道这个概念。

什么是工作树?

工作树被视为属于仓库中项目的文件。 本质上,这是一种工作区。 你可能没有注意到你已经在使用工作树了。 开始使用Git时,将自动检索第一个工作树。

$ mkdir/tmp/foo光盘/tmp/foo

$ git init

$ git工作树列表

/tmp0000000[主机]

从上面的代码可以看出,在首次提交之前也有一个工作树。 接下来,试着在你的项目中再增加一个工作树。

添加一个工作树

要添加新的工作树,必须提供:

硬盘上的一个位置要添加到一个分支名称中的分支$ git clone https://github.com/oal ders/http-browser detect.git

$ CD http -浏览器检测/

$ git工作树列表

/users/olaf/http -浏览器检测90772 AE [主机]

$ gitworktreeadd~~/trees/oal ders/feature-x-boalders/feature-xorigin/master

$ Gitworktreeadd~~/trees/Oal ders/Feature-y-Boalders/Feature-ye9DF 3c 555 e 96 B3 F1

$ git工作树列表

/users/olaf/http -浏览器检测90772 AE [主机]

/users/olaf/trees/oal ders/featu

re-X 90772ae [oalders/feature-X] /Users/olaf/trees/oalders/feature-Y e9df3c5 [oalders/feature-Y]

与大多数其他 Git 命令一样,你需要在仓库路径下使用此命令。一旦创建了工作树,就有了隔离的工作环境。Git 仓库会跟踪工作树在磁盘上的位置。如果 Git 钩子已经在父仓库中设置好了,那么它们也可以在工作树中使用。

请注意到,每个工作树只使用父仓库磁盘空间的一小部分。在这种情况下,工作树需要只大约三分之一的原始磁盘空间。这这非常适合进行扩展。如果你的仓库达到了千兆字节的级别,你就会真正体会到工作树对硬盘空间的节省。

$ du -sh /Users/olaf/http-browserdetect 2.9M $ du -sh /Users/olaf/trees/oalders/feature-X 1.0M

优点:你可以同时在多个工作区中工作。你不需要使用暂存。Git 会跟踪所有的工作树。你不需要设置 Git 钩子。这也比git clone更快,并且可以节省网络流量,因为你可以在飞行模式下执行此操作。你还可以更高效地使用磁盘空间,而无需借助于浅层克隆。

缺点:这是个需要你额外学习和记忆的新东西,但是如果你能养成使用这个功能的习惯,它会给你丰厚的回报。

额外的小技巧

有很多方式可以清除工作树,最受欢迎的方式是使用 Git 来移除工作树:

git worktree remove /Users/olaf/trees/oalders/feature-X

如果你喜欢 RM 大法,你也可以用 rm -rf来删除工作树。

rm -rf /Users/olaf/trees/oalders/feature-X

但是,如果执行此操作,则可能需要使用 git worktree prune清理所有剩余的文件。或者你现在可以跳过清理,这将在将来的某个时候通过git gc自行完成。

注意事项

如果你准备尝试 git worktree,请记住以下几点:

删除工作树并不会删除该分支。可以在工作树中切换分支。你不能在多个工作树中同时签出同一个分支。像其他命令一样,git worktree需要从仓库内运行。你可以同时拥有许多工作树。要从同一个本地仓库签出创建工作树,否则它们将互不可知。

git rev-parse

最后一点注意:在使用 git worktree时,仓库根所在的位置可能取决于上下文。幸运的是,git rev parse可以让你区分这两者。

要查找父仓库的根目录,请执行以下操作: git rev-parse --git-common-dir 要查找你当前所在仓库的根目录,请执行: git rev-parse --show-toplevel

根据你的需要选择最好的方法

就像很多事情一样,TIMTOWDI(条条大道通罗马there's more than one way to do it)。重要的是你要找到一个适合你需要的工作流程。你的需求可能因手头的问题而异。也许你偶尔会发现自己将 git worktree作为版本控制工具箱中的一个方便工具。

via: https://opensource.com/article/21/4/context-switching-git

作者:Olaf Alders选题:lujun9972译者:Chao-zhi校对:wxy

本文由 LCTT原创编译,Linux中国荣誉推出

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。