Git 2.23 引入了一个新命令git switch-阅读文档后,似乎几乎git checkout <branchname>可以与某人解释差异或用例一样?
引入了两个新命令“ git switch”和“ git restore”,以拆分“检出分支以改进其历史记录”和“检出索引之外的路径和/或树状结构以推进当前的操作” “ git checkout”命令中删除“历史记录”。
M. *_*tin 261
该switch命令确实与 执行相同的操作checkout,但仅适用于切换分支的用法。它无法恢复使用 完成的工作树文件 \xe2\x80\x94 restore,另一个命令是从checkout.
分裂checkout命令总结如下:
switch\xe2\x80\x94\xc2\xa0切换到指定分支restore\xe2\x80\x94\xc2\xa0从另一个分支或源恢复文件正如您在引用的 2.23.0 发行说明部分中所指出的,引入了switch和命令来将命令拆分为两个单独的部分:restorecheckout
换句话说,checkout做两件不同的事情,而这个版本将每件不同的事情分成了自己的重点命令。
这种双重目的可以从文档checkout中的摘要描述中看出:
\n\ngit-checkout - 切换分支或恢复工作树文件
\n
添加该命令的switch提交在其提交消息中解释了新命令的基本原理:
\n\n“git checkout”做太多事情是许多用户感到困惑的根源(有时它甚至会咬住老朋友)。为了解决这个问题,该命令将被分成两个新命令:switch 和 Restore。好的\n旧“git checkout”命令仍然存在,直到所有(或大多数\n用户)都厌倦了它。
\n
由此可见,引入新命令是为了通过使用两个集中命令而不是一个多用途命令来减少混乱。
\n请注意(截至 2023 年 9 月)新命令仍列为实验性命令 ( switch, restore):
\n\n该命令是实验性的。行为可能会改变。
\n
我还没有在任何地方找到命令的完整比较。通过阅读文档,我认为这应该是一个相当完整的比较:
\n| 上一个命令 | 新命令 |
|---|---|
git checkout <branch> | git switch <branch> |
git checkout | 不适用(使用git status) |
git checkout -b <new_branch> [<start_point>] | git switch -c <new-branch> [<start-point>] |
git checkout -B <new_branch> [<start_point>] | git switch -C <new-branch> [<start-point>] |
git checkout --orphan <new_branch> | git switch --orphan <new-branch> |
git checkout --orphan <new_branch> <start_point> | 不适用(git switch <start-point>然后使用git switch --orphan <new-branch>) |
git checkout [--detach] <commit> | git switch --detach <commit> |
git checkout --detach [<branch>] | git switch --detach [<branch>] |
git checkout [--] <pathspec>\xe2\x80\xa6 | git restore [--] <pathspec>\xe2\x80\xa6 |
git checkout --pathspec-from-file=<file> | git restore --pathspec-from-file=<file> |
git checkout <tree-ish> [--] <pathspec>\xe2\x80\xa6 | git restore -s <tree> [--] <pathspec>\xe2\x80\xa6 |
git checkout <tree-ish> --pathspec-from-file=<file> | git restore -s <tree> --pathspec-from-file=<file> |
git checkout -p [<tree-ish>] [--] [<pathspec>\xe2\x80\xa6] | git restore -p [-s <tree>] [--] [<pathspec>\xe2\x80\xa6] |
通过比较可以看出,一些先前的用法只需将旧命令名称 ( ) 替换为新命令名称( , ) 即可转换为checkout新命令,而其他用法则需要额外调整。值得注意的变化包括:switchrestore
-b/选项已重命名为/ 。与以前不同,它们还有长选项变体 ( / )。-B-c-C--create--force-create--detach(或-d) 现在在切换到分离头时始终需要,以前对于提交来说它是可选的,但对于分支来说是必需的。-s用于恢复的源树现在由(或) 选项给出--source,而不是作为内联参数。--force(或) 切换现在会失败,而不是忽略它们。也已重命名为,并保留为别名。-f--force--discard-changes--forcekow*_*sky 16
好吧,根据您链接到的文档,其唯一目的是拆分并阐明以下两种不同的用法git checkout:
git switch现在可以用来改变分支机构,git checkout <branchname>不git restore可用于重置文件到某些修改,如git checkout --<path_to_file>不人们对这些不同的使用方式感到困惑,git checkout从与git checkoutStackoverflow 有关的许多问题中可以看出。Git开发人员似乎已经考虑到了这一点。
Ste*_*zyn 11
git checkout 有点像瑞士军刀,它有几种无关的用途。
如果您修改文件但还没有上演更改,git checkout <filename>则将撤消修改...一种取消文件更改的快捷简便的方法。您保留在同一分支中。
git checkout <branchname> (如您所述)切换分支。
两种完全不同的用途,如果文件名和分支名称相似,则可能导致混淆。
将其作为两个命令更为清晰。
switch有一些限制:目前您可以从任何提交切换到<branch name>. 但是,不可能从 <branch name>状态为detached HEAD的特定提交切换。
所以你需要使用git checkout 5efb(其中 5efb 是对任意提交的哈希引用的示例)
| 归档时间: |
|
| 查看次数: |
1449 次 |
| 最近记录: |