本文主要整理了一些开发中常用或者较为常用的命令,主要是Git命令,还会有些终端的其他命令。关于Git的安装等问题这里不再赘述,可自行Google或者百度~
当我们直接打开终端时,默认路径是打开HOME目录,即 /Users/用户名
这一目录。
一、本地仓库使用:
基本命令操作:
1、
$ mkdir newFile
创建一个名字为newFile的文件夹;2、
$ pwd
显示当前文件夹目录;-
3、
$ cd
切换到指定文件目录,$ cd ..
打开上层目录,$ cd ~
打开HOME目录,$ cd -
打开前一个目录,即你在执行该cd操作前执行的cd的目录,若在该cd操作前未执行过cd操作则与$ cd ~
作用相同!
4、
$ git init
初始化当前文件夹为git管理的仓库,会生成一个.git目录文件,目录是git来跟踪管理版本库的。.git文件默认是隐藏的可以使用command+shift+.
来控制隐藏与否;5、
$ git add
将目录文件从工作区加入到暂存区,例:$ git add aaa.md ddd.md sss.md
这里同时添加了三个文件 -- aaa.md/ddd.md/sss.md 。
这里需要说明一下:基本上以下所有的操作都是基于
git add
操作,只有将其加入版本控制才能使git取得版本管理权限,否则git命令无法识别!例如:我在仓库目录中直接放入一个 asd.md 文件,没有git add
操作,此时对其执行删除操作$ git rm asd.md
则会提示fatal: pathspec 'asd.md' did not match any files
路径空间'asd.md'与git已知的任何文件都不匹配。此时我们使用$ git status
会如下图所示:提示我们 asd.md 是未记录的文件!所以不能使用git 除$git add
外的相关命令!
- 6、
$ git commit
将暂存区的文件一次性提交到仓库。Git 希望提交记录尽可能地轻量,因此在你每次进行提交时,它并不会盲目地复制整个目录。条件允许的情况下,它会将当前版本与仓库中的上一个版本进行对比,并把所有的差异打包到一起作为一个提交记录,同时每个提交记录都有与之对应的惟一的一个哈希值。$ git commit -m
"添加说明" -m 操作可以为你本次提交添加说明,一般都要添加你执行了什么操作等说明,一方面方便自己,另一方面也方便其他同事明白你这次提交具体做了什么操作;
7、
$ git mv
将文件移动或者修改文件名,在执行移动或者修改文件名时必须保证要移动或者修改的文件在你当前cd 的文件夹下,$ git mv source destination
,其中source是文件名全称,destination 是新名称或者想要移动到目的文件夹的路径。$ git mv
相当于$ mv
、$ git rm
、$ git add
三个命令的集合与这三个命令同时操作产生的作用是一样的。8、
$ git rm
从工作树和索引中删除文件,$ rm
是直接在工作区将其删除;-
9、
$ git log
显示commit提交的日志,信息包括commit 版本号,提交者,时间,和对于提交的描述,其中commit版本号很有用处,主要用于版本回退,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
,即$ git log --pretty=oneline
则只会打commit版本号和描述信息;
10、
$ git status
获取仓库状态信息,它会包括现在所在分支位置,有多少待提交,待推送版本,有多少加入仓库文件夹但是没被git管理的文件等等;-
11、
$ git diff
查看现在与上一版本的差异;
-
12、
$ git branch
: 创建或者删除分支;-
$ git branch
/$ git branch --list
: 列出本地现有分支; 所在的当前分支将在前面突出显示星号 *;
-
$ git branch -r
/$ git branch --remote
: 列出所有远程分支,并显示所有跟踪的远程分支;
-
$ git branch -a
/$ git branch --all
: 列出所用的本地分支和远程跟踪的分支;
$ git branch <newBranchName>
: 在当前分支
的当前节点
上创建一个名字是newBranchName的分支,但是不会切换到该分支,若该分支已经存在则不会创建成功;$ git branch -m <oldbranch> <newbranch>
:更改分支的名字,若该分支名已经存在则不会更改成功;-
$ git branch -d <branchName>
/$ git branch --delete <branchName>
: 删除本地分支,在这里会出现几种错误;-
error: The branch 'localBranchTwo' is not fully merged. If you are sure you want to delete it, run 'git branch -D localBranchTwo'.
: 这是因为你要删除的分支上包含没有合并的改动,如果想要删除使用-D
/--delete --force
这一选项。 -
Cannot delete branch 'localBranchTwo' checked out at '/Users/HuaXia_GB/Desktop/Coding/GitCommandTest'
:这是因为你现在所在分支是你想要删除的分支,这是不允许的,你需要切换到其他分支才能正确执行删除操作。
-
-
$ git branch -d -r <branchName>
:删除远程分支,需要注意的是远程分支一定要加上远程库的名字,否则会找不到。
-
可以直接使用 -f 选项让分支指向另一个提交。例如:
git branch -f master HEAD~3
,这一命令会将 master 分支强制指向 HEAD 的第 3 级父提交。
-
- 13、
$ git checkout
: 切换、检出分支或恢复工作树文件;-
(1.)切换分支相关命令:
$ git checkout <branchName>
: 切换到某一分支,如果分支不存在或者现在分支中存在未暂存的文件则失败;$ git checkout -b <branchName>
: 在当前节点创建分支然后再切换到该分支,如果分支已经存在则创建失败;$ git checkout -B <branchName>
: 在当前节点创建分支然后再切换到该分支,如果分支已经存在,则那么将其重置为该节点的情况;$ git checkout -f <branchName>
/$ git checkout --force <branchName>
:$ git checkout <branchName>
命令的加强版,强制切换到某一分支,如果分支不存在则失败,如果现在分支中存在未暂存的文件则未暂存文件会被抹除然后切换到目的分支;
-
(2.)检出分支相关命令:
-
$ git checkout <commit>
: 使HEAD头指向相应的节点,其中commit指每次提交后节点对应的哈希值。我们首先看一下 “HEAD”。 HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。HEAD 总是指向当前分支上最近一次提交记录;
-
$ git checkout < branchName >^
/$ git checkout < branchName >~< num >
:使用哈希值时首先我们要使用log
或者reflog
获取节点的哈希值,如果我们想要检出某一分支距离顶端的某个节点我们可以使用拖字符^
或者~3
这种样式:-
使用
^
向上移动 1 个提交记录
-
使用
~<num>
向上移动多个提交记录,如 ~3
-
-
-
版本回退:
在上面的基本操作中我们实现了将文件加入到git管理的本地仓库的操作,但是要是在这一过程中我们出现了不想要的错误或者想还原上一步操作此时该如何操作呢?
1、工作区清理:
$ git checkout -- <fileName>
在仓库中如果对于工作区的某一个文件作了修改且比较多乱,想要恢复到修改前,则使用该命令,后面跟该文件的目录路径,其中 -- 非常重要,若不加 -- 则意味着是要切换分支,即$ git checkout --
可以丢弃工作区的修改,直接还原到你上次对本文件执行 git add操作后的时候,反映到sourceTree就是在未暂存文件的选项中选择丢弃文件;-
2、
$ git reflog
:即Reference logs,可以查找你在本地版本库所有的操作,看清楚是版本库,不是工作区也不是暂存区!
3、暂存区清理:
$ git reset HEAD <fileName>
前面提到恢复工作区某些文件的操作---git checkout -- <fileName>
,当文件从工作区提交到了暂存区后若想恢复其到工作区就用到了git reset HEAD <fileName>
命令,使暂存区的文件恢复到工作区!-
4、本地仓库版本回退:
$ git reset HEAD^
/git reset <versionCount>
当文件已经提交到了本地仓库就要使用到相关的命令去回退到某个版本。HEAD^
表示上一个版本,HEAD^^
表示上上个版本······以此类推,当然若是回退较前版本可以用HEAD~20
,同样可以使用git log
查找某一版本的版本号,如上面示例图片四所示,然后直接git reset <versionCount>
即可直接回退到指定版本。这是默认情况,会将本地版本库的头指针全部重置到指定版本,且会重置暂存区,即这次提交之后的所有变更都移动到未暂存阶段,即放入工作区。还有常用的两个模式:git reset --soft
、git reset --hard
,-
$ git reset --soft
:会将本地版本库的头指针全部重置到指定版本,且将这次提交之后的所有变更都移动到暂存区。 -
$ git reset --hard
:不仅仅是将本地版本库的头指针全部重置到指定版本,也会重置暂存区和工作区,即抹除了你在在版本后的一切操作痕迹 。- 如果使用了
$ git reset --hard
我后悔了怎么办?如果前面你使用了$ git log
命令那么可以找到最新的提交版本号然后使用$ git reset
重新返回我们使用$ git reset --hard
命令前的版本,要是没有使用$ git log
命令或者关闭了终端呢?别着急,还记得上面$ git reflog
命令吗?使用该命令就可以找到你对本地版本库的所有操作,找到相应版本号,后面的操作就不用多叙述了吧😆。
- 如果使用了
-
5、
二、远程仓库:
- 1、
$ git clone
: 后面跟URL,用于从远端克隆文件,git clone 命令在真实的环境下的作用是在本地创建一个远程仓库的拷贝,一般使用空的文件夹;这里可能会出现clone不下来的问题,因为一般使用SSH地址进行客隆,那么需要将本机的SSH key添加到GitHub或者Coding。 远程分支有一个命名规范 —— 它们的格式是:<remote name>/<branch name>
,因为当你用 git clone 某个仓库时,Git 已经帮你把远程仓库的名称设置为 origin 了,所以大多数情况下我们看到远程仓库名为origin/<branch name>
。
参考资料一:Git官方文档;
参考资料二:廖雪峰的Git教程;
参考资料三:sourceTree 及激活文件下载,密码: 1du3;
参考资料四:Git操作可视练习;