实用git指令

本文以软件构造实验一中涉及到的git操作为基础,结合git官方文档总结了一些常用的git指令,以供需要时快速查看。实际工作中我们更多是想要解决眼前问题,比如"我想要克隆一个仓库到本地该怎么做"、"我要将我的代码上传到远程仓库怎么做"、"我要修改远程仓库代码怎么做"这样的问题,而查看一本详细的git指令教程虽然全面详细但是对于解决这些常见问题来说效率实在太低,而且对于一个连指令如何书写的小白来说一次性讲清背后原理实属无用功,所以本文主要是想以应用频率很高的git操作为切入点展开介绍,同时也为已经了解具体操作内涵只是忘记指令的人提供了简要版操作说明,更高效解决问题。


clone

操作目的:

将远程仓库复制克隆到本地指定位置

简要操作说明:

  • 打开cmd或git bash,使用cd命令进入想要将仓库clone到的本地文件夹路径
  • 使用指令git clone <仓库的url>将仓库clone到目标文件夹,使用git clone <仓库的url> 新名字 将仓库clone到目标文件夹并重命名为指定名称。

详细操作说明:

  • 打开cmd或Git Bash,使用cd命令进入想要将仓库clone到的本地文件夹路径:

    • cmd: cmd一进入默认在C盘中,如果目的文件夹不在C盘中则需要先进行切换磁盘操作,以切换到D盘为例,直接在cmd中输入 D: 即可完成磁盘转换(见下图)
    • cmd: 然后使用cd指令进入目的文件夹位置即可(此处以目的文件夹在D->JavaProject->Lab为例)cd JavaProject\Lab注意在cmd中的路径要使用'\'而非'/'(见下图),这样克隆下来的仓库就会自动存储在D/JavaProject/Lab中了



    • cmd: (当然,如果你手滑cd后面的路径输入错了但已经进入了错误的位置,也无需关闭cmd重新来过,你可以使用指令cd.. 来退出返回至上一层)

    • gitbush: 如果使用gitbush,则在gitbush下直接使用cd指令进入所在文件夹,同样以D->JavaProject->Lab为例,与cmd下路径输入要求不同,使用'/'而非'\',其次就是上来就要有/d表明进入D盘,指令:cd /d/JavaProject/Lab

  • 找到准备clone的仓库的http链接或ssh链接(如果使用ssh链接需要保证已经提前配置好ssh),查找url方法如下图(以github上的一个仓库为例进入仓库首页,点击右方绿色的Code按钮即可查看http或ssh链接,点击链接右方的按钮可自动复制)



  • 复制结束之后,返回cmd或Git Bash,输入指令git clone <仓库的url>将仓库clone到目标文件夹,clone成功后就可以在D/JavaProject/Lab下找到名字为仓库名称的文件夹了,这个文件夹中就是仓库中所有的内容了。(下图以cmd操作为例)



    • 如果你不想将文件夹的名字是默认的仓库名,第一种办法当然是右键重命名,第二种方法就是使用指令git clone <仓库的url> 新名字 将仓库clone到目标文件夹并重命名为指定名称,这里我将原名为test的仓库clone下来的文件夹命名为MyTest,这样clone下来的仓库文件夹名字自动设置为MyTest了。





      (如果使用上述操作报错了多半是网络原因连不上github,可以多试几次或查找报错解决方案)

init & add & commit & push

操作目的:

将本地仓库上传到远程仓库

简要操作说明:

  • 打开cmd或Git Bash使用cd指令进入本地仓库(也就是存储所有项目文件的那个本地文件夹)所在位置
  • git init
  • git add .提交所有文件;或使用指令git add <file>提交单个文件
  • git commit -m "<description>"
  • git remote add <name> <http/ssh链接>与远程仓库建立链接,<name>处换成此链接名字即可,一般都命名为origin
  • git push <name> master : master合并分支

详细操作说明:

  • 打开cmd或Git Bash使用cd指令进入本地仓库(也就是存储所有项目文件的那个本地文件夹)所在位置

    • cmd: cmd一进入默认在C盘中,如果目的文件夹不在C盘中则需要先进行切换磁盘操作,以切换到D盘为例,直接在cmd中输入 D: 即可完成磁盘转换(见下图)
    • cmd: 然后使用cd指令进入目的文件夹位置即可(此处以目的文件夹在D->JavaProject->Lab为例)cd JavaProject\Lab注意在cmd中的路径要使用'\'而非'/'(见下图),这样克隆下来的仓库就会自动存储在D/JavaProject/Lab中了



    • cmd: (当然,如果你手滑cd后面的路径输入错了但已经进入了错误的位置,也无需关闭cmd重新来过,你可以使用指令cd.. 来退出返回至上一层)

    • gitbush: 如果使用gitbush,则在gitbush下直接使用cd指令进入所在文件夹,同样以D->JavaProject->Lab为例,与cmd下路径输入要求不同,使用'/'而非'\',其次就是上来就要有/d表明进入D盘,指令:cd /d/JavaProject/Lab

  • 输入指令git init将原文件夹初始化为git仓库,以本地仓库TEST为例,其所在位置为D:/JavaProject/TEST这里的init操作需要我们进入这个仓库再进行,比如这个TEST仓库中有两个文件(以下在Git Bash下演示,也可以使用cmd)



  • 使用git add类指令指定所需文件进行追踪,一般使用git add .):

    • git add -A :等价于git add -all提交所有变化
    • git add -u :等价于git add -update提交被修改(modified)和被删除(deleted)的文件,不包括新文件(new)
    • git add . :提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)的文件,并根据.gitignore文件做过滤
    • git add * :不会根据.gitignore文件做过滤而是将任何文件都加入
    • git add <file> :提交单个指定文件<file>处换成指定文件名称即可

  • (此步可忽略)(可以使用指令git status查看当前文件夹中所有文件状态,如果是红色表示还没被add到暂存区,绿色表示已经add到暂存区)



    如果此时删除一个文件"MagicSquare.java"再运行指令git status则出现



    这里仔细阅读可以发现如果是误删了这个文件,那么我们可以使用指令git restore <file>进行恢复

  • 输入指令git commit -m "<description>" 将修改从暂存区提交到本地库:<description>处换位对此次提交的叙述即可,比如可以是"initial commit","second","for fifth commit","add a test"等等,总之就是为了之后查看此次提交时能根据描述想起此次操作信息即可。

  • 连接远程仓库:使用git remote指令检查现在已创建好的远程链接,如果是第一次创建则使用该指令将没有返回值,使用指令git remote add <name> <http/ssh链接>,<name>处换成此链接名字即可,没有要求,自己命名,一般都命名为origin,<http/ssh链接>就换成你想要提交的仓库的http/ssh链接即可,当然如果你想使用ssh链接就需要提前配置好相关设置,但好处是之后无需反复输入用户名和密码,更方便。查看相关链接方法如下图。再使用指令git remote检查一下是否已经创建好链接,如果创建好则该指令返回origin(或是你刚才的命名)



  • 使用指令git push类将本地库分支推送到远程仓库分支:(按使用频率排序,选择所需指令即可)(如果之前链接使用的是http链接此时提交就需要你输入用户名和密码,如果是ssh链接此时就无需输入)

    • 如果所要提交到的远程仓库分支中的内容包含于本地仓库分支中的内容,那么你直接使用指令git push <name> <本地分支名>:<远程分支名><name>就是之前你自己起的远程连接名,一般是origin。具体指令例如可以是git push origin master:master该指令可将当前本地仓库的master分支推送到远程仓库master分支中,如果远程仓库没有master分支则会自动创建,你的提交到此为止。(这里我又新创建了一个ssh链接对应的origin1,使用origin1进行上传)点开github就可以在master分支中找到文件了



    • 如果所要提交到的远程仓库分支中的内容不包含于本地仓库分支中的内容使用git push <name> master:master指令就会报错,并提示你先pull下来再push,此时你有以下几种选择:

      • git push -f origin master:master:不想pull下来,甚至不想要远程分支内的所有内容,只想要把本地的push上去,那么使用强制提交指令git push -f origin master:master将本地master分支强制提交成为远程仓库的master分支
      • git pull origin master:master:先提交本地修改git add . ,git commit -m "init",再pull下来git pull origin master:master,如果出现"Please enter a commit message to explain why this merge is necessary"可按esc键同时输入:wq退出或按i键进入insert模式修改最上面黄色选中的信息,选择不修改。
    • 几种省略写法:

      • git push origin master:指令git push origin <本地分支名>:<远程分支名>中远程分支名被省略,则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在则将会被新创建
      • git push origin :master:指令git push origin <本地分支名>:<远程分支名>中本地分支名被省略,则相当于push一个空的本地分支到远程分支,表示删除该远程分支master,等同于指令git push origin --delete master
      • git push origin:如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,会将当前分支推送到对应分支上,当然如果你这么写系统会提示你把指令写全,如果你每次都是提交到master分支上,可以输入指令git push --set-upstream origin master只需输一次这个指令,以后就都可以省略写成git push origin而不会再提示你补全指令了

pull & fetch & merge

操作目的:

拉取远程仓库代码至本地,将远程仓库代码与本地仓库代码合并

简要操作说明(拉取有权限的仓库):

  • 打开cmd或Git Bash使用cd指令进入pull操作后想要存放的目标文件夹所在位置
  • git init:git pull要求必须连接远程仓库
  • git remote add <远程主机名name> <http/ssh链接>:git pull要求必须连接远程仓库,<name>处换成此链接名字即可,一般都命名为origin
  • git pull <远程主机名name> <远程分支名>:<本地分支名>:<name>处换成此链接名字即可,一般都命名为origin,pull操作会自动fetch和merge,git pull = git fetch + git merge,如果本地仓库已经修改与远程仓库不同但是不想更新本地仓库与远程保持一致,则需先git add . ,git commit -m "init",再pull下来git pull origin master:master如果出现"Please enter a commit message to explain why this merge is necessary"可按esc键同时输入:wq退出或按i键进入insert模式修改最上面黄色选中的信息,选择不修改。

简要操作说明(拉取无权限的仓库):

(无权限仓库拉取说白了就是clone)

  • 打开cmd或git bash,使用cd命令进入想要将仓库拉取到的本地文件夹路径
  • 使用指令git clone <仓库的url>将仓库clone到目标文件夹,使用git clone <仓库的url> 新名字 将仓库clone到目标文件夹并重命名为指定名称。

实用git指令的更多相关文章

  1. 第一章 git指令与设置

    相关指令: 1.从远程的master分支上创建新的分支,此时新分支内容与master分支内容相同: git checkout master; git branch newbranch; git che ...

  2. 使用git指令下载github仓库代码(笔记)

    通过Git指令下载源码 Git概念说明 ​ 三种状态:修改状态.暂存状态和Git仓库 ​ 基本的Git工作流程: ​ 在工作目录中修改文件 ​ 暂存文件,将文件的快照放入暂存区域 ​ 提交更新,找到暂 ...

  3. 工作中常用Git指令操作

    常用Git指令总结 前阵子有几天好不顺,可谓是喝水都呛着,更何况被Git给呛着了,还不轻,哈哈.所以打算总结一下自己在工作使用到Git相关的东西以及和大家探讨使用GIt的心得体会.于是,关于Git的的 ...

  4. git 指令如何撤销一次merge

    在使用git指令时难免会发生错误的merge的情况,那么如何在这种情况下回退到错误发生之前的情况? git reflog 指令显示历史的操作 4457e43 HEAD@{0}: reset: movi ...

  5. git 指令记录

    由于之前一直用svn 用git也是用图形化的工具 还是要了解一下git指令 因为都是版本控制工具 有很多相似之处 所以理解起来也比较轻松 仓库: github上面的项目 工作目录下面的所有文件都不外乎 ...

  6. git指令总结及常见问题积累与解决方案

    git指令总结及常见问题积累与解决方案 git初始化一个项目并且长传到服务器后端步骤: 1.本地文件操作 通过:git init初始化化一个项目  会出现一个隐藏文件 ,可以文件夹属性设置进行查看,此 ...

  7. git指令-未完待更新

    git指令 1. $ git config --global user.name "Your Name" $ git config --global user.email &quo ...

  8. git 指令笔记

    狂躁,太狂躁!!赶上过年,赶上自己的懒癌,12月底就学完的教程直到今天才整理笔记,中途沉默在游戏中..... 只给出Windows下git指令操作,推荐大家去廖雪峰前辈那里学习(百度搜索:廖雪峰的官方 ...

  9. git指令-添加远程仓库

    git指令-添加远程仓库 首先在GitHub上创建属于你自己的远程仓库:例如我创建的远程仓库mybatis用于我最近保存的mybatis代码 目前,在GitHub上的这个learngit仓库还是空的, ...

随机推荐

  1. 列举 Spring Framework 的优点?

    由于 Spring Frameworks 的分层架构,用户可以自由选择自己需要的组件. Spring Framework 支持 POJO(Plain Old Java Object) 编程,从而具备持 ...

  2. 学习GlusterFS(八)

    GlusterFS集群创建 一.简介 GlusterFS概述 Glusterfs是一个开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端.在传统的解决 方案中Glusterfs能够 ...

  3. python学习笔记(一)——Python基础

    一.python 基础语法 python 的解释器在启动时会自动加载一个内建的模块,因此我们在使用 print().input()等函数时不用导入其他模块文件. 基本语法: 每条语句结尾没有分号 定义 ...

  4. C语言泛型编程——泛型冒泡排序

    在实际编程中,常常会需要一些方法(函数),比如排序,它们具体实现基本一致,仅仅只有参数类型不同, 那么可不可以有一种通用的函数,不管是什么类型的参数都可以通用呢? 泛型编程:泛型即是指具有在多种数据类 ...

  5. c/c++中的i++和++i的区别

    使用 i++ vs. ++i i++是先赋值再加1 ++i是先加1再赋值 到目前为止,你已经学习了如何编写下面这样的 C++ for 循环: for (int i = 0; i < 10; i+ ...

  6. 「入门篇」初识JVM (下下) - GC

    垃圾收集主要是针对堆和方法区进行:程序计数器.虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于> 线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收. GC - J ...

  7. Vue2的右键弹出菜单(vue-contextmenu)

    给大家推荐一个基于Vue2的右键弹出菜单插件,支持单一SPA页面以及可以在循环绑定中使用. 项目地址为:https://github.com/chIIC/vue-...demo1: 父组件绑定右键事件 ...

  8. Django ElasticSearch Ionic 打造 GIS 移动应用 —— 架构设计

    搜索引擎是个好东西,GIS也是个好东西.当前还有Django和Ionic.最后效果图 构架设计 对我们的需求进行简要的思考后,设计出了下面的一些简单的架构. GIS架构说明 -- 服务端 简单说明: ...

  9. scrapy框架爬取国际庄2011-2022的天气情况

    目标网站:http://www.tianqihoubao.com/lishi/ 一.创建项目+初始化爬虫文件: scrapy startpoject tianqihoubaocd tianqihoub ...

  10. 没有高度的div中的子元素高度自动撑开

     直接上代码: 很多时候 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...