【Git】checkout 用法总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【Git】checkout 用法总结相关的知识,希望对你有一定的参考价值。
参考技术A 切克闹(checkout)作为git中最为常用的命令之一,对它使用的熟练程度直接决定了你对git理解和掌握的熟练程度,因此我们有理由为这个命令好好的做一下总结。checkout最常用的用法莫过于对于工作分支的切换了:
该命令会将当前工作分支切换到branchName。另外,可以通过下面的命令在新分支创建的同时切换分支:
该命令相当于下面这两条命令的执行结果:
该命令的完全体为:
该命令的一个应用场景为:当我们刚从git上clone一个项目后,我们可以查看该项目的分支情况
可以看到,克隆完后,只会默认创建一个master本地分支,其他都是远程分支,此时如果我们想切换到newBranch的远程分支该怎么操作呢?方法有很多种,我们简单介绍两种:
方法一:使用git checkout -b
方法二:使用git branch <branchname> [<start-point>]
方法一其实是方法二的简化版
要想更深入的了解checkout,我们需要了解checkout的作用机制。该命令的主要关联目标其实是.git 文件夹下的HEAD文件,我们可以查看工程下面的.git文件夹:
该文件夹下HEAD文件记录了当前HEAD的信息,继续查看HEAD文件:
可以看到当前HEAD文件指向了refs/heads路径下的master文件,该文件记录了master分支最近的一次commit id,说明当前HEAD指向了master分支。如果我们将当前分支切换到newBranch 分支,我们再看HEAD文件:
可以看到HEAD文件内容指向了newBranch分支
用法1:
该命令主要用于检出某一个指定文件。
如果不填写commit id,则默认会从暂存区检出该文件,如果暂存区为空,则该文件会回滚到最近一次的提交状态。
例如:
当暂存区为空,如果我们想要放弃对某一个文件的修改,可以用这个命令进行撤销:
如果填写commit id(既可以是commit hash也可以是分支名称还可以说tag,其本质上都是commit hash),则会从指定commit hash中检出该文件。用于恢复某一个文件到某一个提交状态。
用法2:
该命令是文章开头部分所说的checkout常见用法的扩展,我们可以指定某一个分支或者某一次提交来创建新的分支,并且切换到该分支下,该命令相当于下面两条命令的执行结果:
用法3:
该命令主要加了一个可选参数B,如果已经存在了同名的分支,使用 git checkout -b <new_branch>会提示错误,加入-B可选参数后会强制创建新分支,并且会覆盖原来存在的同名分支。
用法4:
假如你的某个分支上,积累了无数次的提交,你也懒得去打理,打印出的log也让你无力吐槽,那么这个命令将是你的神器,它会基于当前所在分支新建一个赤裸裸的分支,没有任何的提交历史,但是当前分支的内容一一俱全。新建的分支,严格意义上说,还不是一个分支,因为HEAD指向的引用中没有commit值,只有在进行一次提交后,它才算得上真正的分支。
用法5:
这个命令适用于在切换分支的时候,将当前分支修改的内容一起打包带走,同步到切换的分支下。
有两个需要注意的问题。
第一,如果当前分支和切换分支间的内容不同的话,容易造成冲突。
第二,切换到新分支后,当前分支修改过的内容就丢失了。
所以这个命令,慎用
用法6:
这个命令可以用来打补丁。这个命令主要用来比较两个分支间的差异内容,并提供交互式的界面来选择进一步的操作。这个命令不仅可以比较两个分支间的差异,还可以比较单个文件的差异哦!
注:文中如有任何错误,请各位批评指正!
Git:git-checkout的用法总结
原帖收藏于IT老兵驿站,传递一个IT老兵在凋零前的光和氧。
前言
结合前一篇文章,再认真总结一下git-checkout
的用法,因为可能一次总结到不了位,那么就不怕啰嗦,不怕重复,多总结几次,这样可能会造成每篇文章内容之间的分布不是那么清晰,将来再做更好的整理吧,因为现在这种方式,对于当前的学习是有帮助的,是从浅入深的。
正文
概要
git-checkout - Switch branches or restore working tree files
从上面可见,git checkout是用来切换分支或者回复工作目录的,看到这里,记住这一点,会有很大帮助。(备注:我发现,有的时候,学习的节奏放慢一些,反而其实是更有效率的,反而是更快的。多思考一些,记的更准确,因慢得快)
语法
git checkout [-q] [-f] [-m] [<branch>]
git checkout [-q] [-f] [-m] --detach [<branch>]
git checkout [-q] [-f] [-m] [--detach] <commit>
git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>]
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>…?
git checkout [<tree-ish>] [--] <pathspec>…?
git checkout (-p|--patch) [<tree-ish>] [--] [<paths>…?]
用法1
git checkout <branch>
用来切换到一个分支上。切换index
和工作目录,还有HEAD
指针到这个分支上。本地发生的修改也会被保留。如果本地不存在这个分支而远程存在同名分支的话,则这个命令相当于:
$ git checkout -b <branch> --track <remote>/<branch>
git checkout -b|-B <new_branch> [<start point>]
-b
表示创建新分支;如果分支存在的话,不进行任何处理。
-B
在创建新分支的功能和-b
是一样的;但是,如果分支存在的话,它会重置<start_point>
。
Specifying -b causes a new branch to be created as if git-branch[1] were called and then checked out. In this case you can use the --track or --no-track options, which will be passed to git branch. As a convenience, --track without -b implies branch creation; see the description of --track below.
If -B is given, <new_branch> is created if it doesn’t exist; otherwise, it is reset. This is the transactional equivalent of
$ git branch -f <branch> [<start point>]
$ git checkout <branch>
that is to say, the branch is not reset/created unless "git checkout" is successful.
这里涉及到track
和<start point>
的概念。
track
表示的是远程仓库与之对应的分支,这个信息被称为upstream
,上游,远程仓库的,是上游。本地的,是下游,有一个对应的关系。track
本意是轨迹、跟踪的意思,使用了--track
或者--no-track
来设置这个,这个信息会传递给git branch
。
用法2
git checkout --detach [<branch>]
git checkout [--detach] <commit>
切换代码到某一个提交号或者分支上,并且分离了HEAD
指针,指向了这个提交。这块有点复杂,还需要理解深度理解一下,这个可能要留到下一篇帖子来完成了,争取每天整理一些(2018-08-03)。
整理完成,可以参考这里(2018-08-04)。
用法3
git checkout [<tree-ish>] [--] <pathspec>…?
git checkout (-p|--patch) [<tree-ish>] [--] [<pathspec>…?]
从index
或者<tree-ish>
检出代码来替换<pathspec>
处的代码。如果<tree-ish>
被指定了,那么index
和工作空间的代码都会被更新。
The index may contain unmerged entries because of a previous failed merge. By default, if you try to check out such an entry from the index, the checkout operation will fail and nothing will be checked out. Using -f will ignore these unmerged entries. The contents from a specific side of the merge can be checked out of the index by using --ours or --theirs. With -m, changes made to the working tree file can be discarded to re-create the original conflicted merge result.
index
区域可能还有一些没有merge
的条目,因为之前有失败的merge
。
后一种用法使用互动的方式来完成这个功能。
到此,这个命令的用法基本整理完,下一步,要实践一些实例。
以上是关于【Git】checkout 用法总结的主要内容,如果未能解决你的问题,请参考以下文章