Git命令的相关使用

 本文主要整理了一些开发中常用或者较为常用的命令,主要是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 操作可以为你本次提交添加说明,一般都要添加你执行了什么操作等说明,一方面方便自己,另一方面也方便其他同事明白你这次提交具体做了什么操作;
    • git commit
  • 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 C1、git checkout master、 git commit、 git checkout C2

      • $ git checkout < branchName >^ / $ git checkout < branchName >~< num >:使用哈希值时首先我们要使用log或者reflog获取节点的哈希值,如果我们想要检出某一分支距离顶端的某个节点我们可以使用拖字符^ 或者~3这种样式:

        • 使用^向上移动 1 个提交记录

          git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^

        • 使用~<num> 向上移动多个提交记录,如 ~3

          git checkout HEAD~4.gif

版本回退:

 在上面的基本操作中我们实现了将文件加入到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 --softgit 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操作可视练习;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容