目前的项目版本管理,Git占主要地位。目前市面上Git的可视化工具也比较多,使用起来也很方便。但是,一些关键的Git命令,我们还是要熟练掌握的。
以下就是我整理的Git比较常用的命令以及使用说明:
- git commit -m 'message' Git提交。在条件允许的情况下,他会将当前版本与仓库的上一个版本进行对比,把差异打包生成一个新的提交记录
- git branch <branch-name> <ref> <ref>不填默认Git在当前分支上复制一个新的分支出来。<ref>可以是任何可以到达的节点,例如分支名称,提交ID,当前分支的HEAD的所在位置,可以利用HEAD~<num>或者HEAD^赖在分之树上移动来选取节点,也可以利用HEAD^2来选取两个父节点的合并父节点
- git checkout <-b> <your-branch-name> <origin-branch-name> Git切换到某一个分支。加上-b会创建一个新的本地分支并赋予后面跟的分支名称并切换到该分支。如果加上origin-branch-name参数,会从远程仓库拉取对应分支复制一个新的命名为your-branch-name的本地分支并切换到该分支,该分支会自动追踪远程分支(也就是自动关联该远程分支)
- git checkout <commit-ID> | <branch-name> | HEAD^ | HEAD~<num> Git将HEAD分离并指向对应的提交记录的ID。正常情况下,分支的志向顺序是HEAD->branch->commit ID,命令执行后指向将变成HEAD->commit ID。第二种写法是分离出当前分支的HEAD并指向当前提交记录的父节点,写一个^就是向上移动一次,写两个就是向上移动两次,以此类推...。第三种写法是不想写太多的^,HEAD会从当前分支分离出来并向上移动num个提交记录
- git merge <branch-name> Git会把branch-name分支上面所有的提交记录合并到当前分支
- git rebase <branch-name> <to-branch-name> Git会把branch-name上所有的提交记录复制到<to-branch-name>(不填默认当前分支)上,并把<to-branch-name>所做的提交放在最后,形成一个线性提交记录,并自动检出<to-branch-name>节点
- git branch -f <branch-name> HEAD~<num> | <commit-ID> Git会把branch-name分支强制指向HEAD的向上num次的父提交记录或者对应ID的提交记录处
- git reset HEAD~<num> | HEAD^ Git会把当前分支撤销到对应设置的父提交记录上(num(不写默认为1)是几便向上移动几次或者有几个^便向上移动几次,即撤销对应设置的提交)。此命令执行之后,对应撤销的提交所对应的更改还存在,只是回退到了未加入暂存区状态
- git revert HEAD Git会把当前分支撤销到当前提交记录的父提交记录上。与reset的区别是,reset只是撤销了本地更改并不会对远程仓库有影响,revert会生成并指向一个新的记录,这个新记录与我们要回退到的提交记录是一样的,这样我们就可以把更新推送到远程仓库与别人分享了
- git cherry-pick <commit-ID>... Git会把对应的提交记录复制到当前所在位置(HEAD)的下面,并指向最后的提交记录
- git rebase -i(--interactive) HEAD^ | HEAD~<num> Git会打开一个UI界面,此UI界面你可以把num个父提交进行重新排序、删除提交或者合并提交操作,在UI界面编辑完成之后,Git会按照编辑结果进行提交记录的复制并指向最后的提交记录
- git commit --amend Git会忽略本次提交,将本次提交的内容合并进上一次的提交记录上。这个命令的主要用法是上一次提交有错误或者有遗漏,而又不想回退再重新提交,便可以使用该命令给上一次提交打一个补丁
- git tag <tag-name> <commit-ID> Git在commitID处打一个名称为tag-name的标签,该标签会永久指向该提交记录
- git describe <ref> <ref>可以是任何能被Git识别成提交记录的引用,如果你没有指定的话,Git会以你目前所检出的位置(HEAD)。它输出的结果是这样的:<tag>_<numCommits>_g<hash>。<tag>表示的是离<ref>最近的标签,<numCommits>时表示这个<ref>与<tag>相差有多少个提交记录,<hash>表示的是你所给定的<ref>所表示的提交记录哈希值的前几位
- git clone <remote-address> Git会从远程仓库下载对应的仓库到本地,并自动检出master分支作为当前分支
- git fetch Git会从远程仓库系在本地仓库中缺失的提交记录,并更新本地的所有远程分支指向最新的提交记录。但是,它不会改变你本地仓库的状态
- git pull (--rebase) Git会从远程仓库下载所有本地仓库分支缺失的提交记录,然后将当前本地分支与远程分支做merge操作,来保证本地当前分支的提交记录是最新的。也就是说git pull命令默认就是git fetch 和 git merge <just-fetch-branch>的缩写,如果加上了--rebase,就是git fetch和git rebase <origin-branch-name>的缩写
- git branch -u <origin-branch-name> <branch-name> Git会设置<branch-name>本地分支追踪<origin-branch-name>远程分支,如果我们当前就在该本地分支上,可以省略本地分支名称这个参数,即:git branch -u <origin-branch-name>
- git push <remote> <place> 示例:git push origin master Git会将master本地分支的更改推送到远程仓库的master分支,如果我们本地分支的名称和追踪的远程仓库不同,我们使用:git push origin <source>:<destination> 来推送,例如:git push origin foo:master 就是将我们本地foo分支上面的提交推送到远程的master分支上。我们的推送位置均可以使用~<num>、^或者提交ID来确定推送到哪一次提交,例如:git push origin foo^:master 就是说把本地foo分支的上一次提交之前的所有提交推送到远程的master分支。注意:<remote> <place>参数和origin <source>:<destination>参数均适用于git fetch和git pull .只是git fetch的<source>:<destination>的方向相反!<source>是远程分支名,<destination>是本地分支名称。同时,如果本地分支不存在,则会自动创建本地分支。git pull就是git fentch和git merge的组合,不详细阐述
- git push origin :<destination> Git将会删除远程分支<destination>,并将本地关联分支一起删除
- git fetch origin :<destination> Git将会创建一个本地分支<destination>,作用同git checkout -b <branch-name>一致
- git relog 查看美化后的Git提交日志
文章评论