git常用命令说明教程

git介绍

是一个分布式的,版本控制软件。每台使用git的电脑都是一个分版本库。svn是集中管理的。

安装git

一 git相关操作

1.官网下载最新版安装https://git-for-windows.github.io

2.创建版本库:

创建仓库,可添加文件的步骤

  • 1. git init
  • 2. touch README.md
  • 2. git add  README.md    --添加文件
  • 3. git commit -m "提交记录"

3 提交修改文件

文件修改以后,想要添加到仓库,也需要两个步骤

  • 1. git add README.md
  • 2. git commit -m "remark"

4.回滚

  •  1. git log --查看commit记录
  • 2.git reflog  --查看操作记录
  • 3.git reset --hard HEAD^   --回到上个版本
  • 4.git log     --查看commit记录,会发现上次cmmit版本已经不再
  • 5.git reflog   -- 查看操作记录 ,找到上次commit 的编号
  • 6.git reset --hard 3c0478a  --恢复上个版本,(这个“3c0478a”编号,是我上次commit的编号)
  • note: git 回滚到特定版本,都是指向特定版本的指针

5.工作区和暂存区(working directory)

版本库(Repository),工作区隐藏的.git目录,就是版本库。

git版本库中有很多东西,其中最重要的是 stage或叫index(暂存区)。同时git为我们自动创建了一个分支叫 master,以及指向master分支的指针 head。

提交东西的步骤:

1 git.add 提交修改的文件到暂存区

2.git commit 实际将暂存区里所有的文件提交到,当前的分支。

6.管理修改。

//git 比其他svn等工具优秀时因为,git跟踪管理的是修改而非文件。

  • 1.修改 README.md文件
  • 2.git add README.md --提交这个文件到,暂存区
  • 3.再次修改 README.md
  • 4.git commit -m "commit working file and clean tree working "  --提交缓暂存区文件
  • 5.git status   -- 会发现,README.md文件的状态还是:modified
  • 6.git diff HEAD -- README.md  --可以查看两个修改的差异。
  • 7.git add README.md --再次 添加到暂存区
  • 8.git commit -m "commit README.md"  -- 这样才完全提交。

7.撤销修改

  • 1、修改 README.md
  • 2、git checkout -- README.md  //撤销工作区的修改,恢复到上次add的状态
  • 3、git reset HEAD file       //撤销添加到暂存区的修改,将文件放回到工作目录
  • 4、如果已经commit 可以选择回滚到上个版本: git reset --hard HEAD^   --回到上次的版本
  • 5.当已经推送到远程,那就没办法了。

8.删除文件

  • 1.用rm 或者资源管理器删除一个文件。会提示和版本库不一致。

  • 2.提示里,有两种方式可以,

    • 2.1,是git rm file 删除文件,然后 git commit -m "remove license"
    • 2.2 ,用git checkout -- file 恢复被删除的文件到工作区。

二 远程仓库

git是分布式的,那就需要最少两台电脑,分别保存仓库,彼此互为服务器。最好有一台24小时开机的电脑,当服务器。

现在可以使用github,作为远程的仓库,github公开的版本(所有人都能看到)是不收费的,但要作为私人的仓库就要收费。

1.将github作为服务器

  • 1.1 创建ssh key,
  • ssh-keygen -t rsa -C "youremail@example.com" //(查看你的用户目录下面有没有id_rsaid_rsa.pub这两个文件。如果有说明你已经创建过ssh key; 将前面的邮箱换成你自己的邮箱)
  • id_rsa 私有密钥,不要告诉任何人。
  • id_rsa.pub 公开密钥,可以告诉任何人。
  •   1.2 登陆GitHub,打开“Account settings”,“SSH Keys”页面:填入你的公有密钥,其中的title 任意填写。 完成这一步,就可以推送数据了。

2,添加远程仓库 

     git remote add origin git@github.com:youname/projctName.git //这里的orgin 是默认的可以起别的名字。(注意,远程必须是空项目,要不会报错!)

  • 2.1 提交到远程 git push -u origin master  //第一个要加-u 这样git 不会吧远程建立新的分支,master ,而会将本地和远程的master合并。以后再提交直接 git push origin master 即可。
  • 2.2 第一次 push 或clone 会出现警告,输入yes回车即可。
  • 2.3 git pull origin master 会将远程的更新拉回本地工作目录。

3. 克隆远程仓库

git clone git@github.com:youname/projctName.git //这样就可以将远程的项目克隆到本地。还可以使用https方式,这种方式需要输入口令。某些公司只能使用https。

三、分支管理

1.git 切换和合并分支

git 切换和合并分支都可以在1秒内完成,因为git是用HEAD指向到对应分支的地址,所有很快。当然合并以后可能会有冲突,需要先解决冲突。解决后,add 并 commit 这样解决冲突。可以用git log 查看冲突的合并情况。git 也是用<<<<<<<<  ========= >>>>>>>表示冲突。

  • 1.git branch //查看分支的版本。
  • 2.git branch <name> //创建名称为 name 的分支。
  • 3.git checkout <name> //切换分支。
  • 4.git checkout -b <name> //创建并切换分支。
  • 5.git merge <name> //用当前分支合并name分支
  • 6 .git checkout -d <name> //删除name分支。

2.分支管理策略

通常默认合并分支,使用的是 fast forward 模式,这种merge 模式,删除掉分支以后,会丢失分支的信息。

强制禁止 fast forward 模式以后,在merge 时生成一个新的commit,这样在分支历史上就可以查看分支的信息。

--no-ff 方式 git merge //禁用 fast forward模式

操作步骤:

git checkout -b dev //创建,dev分支,并切换

git add README.md

git commit -m "commit README.md"

git checkout master //切换到master分支。

git merge --on-ff -m "merge with no-ff" dev //这样就,禁用了 fast forward模式,因为新加了一个commit 所以使用 -m "" 添加commit描述。

git log --graph --pretty=oneline --abbrev-commit //查看分支合并历史

2.1 分支策略

master分支应该相对稳定,只用于发布新版本,而不应该在上面开发。

干活都应该在dev分支上,当某一时候,需要发布新版的时候再往master合并发布新版本。

2.2 bug分支

对于bug任何程序都会有,git分支十分的强大所以,每个bug都可以使用一个分支处理,处理完成删除分支。

操作步骤:

git status //查看工作区,发现有没有开发完成的代码。

git stash //将当前没有开发完成的工作保存起来。

git checkout master //假如修复master分支的bug

git checkout -b issure-101

git add README.md  //修复README.md这个文件中的问题

git commit -m "fix issure-101 README.md"

git checkout master

git merge --on-ff -m "fix issure101" issure-101  //合并分支

git branch -d issure-101 //删除分支

git branch dev

git status //这里检查工作区状态,发现是空的,因为通过 stash已经把工作状态存起来了。

git stash list //查看存储的工作列表

git stash pop //取出存储的工作,并删除stash.

git stash apply //恢复工作区内容,但不删除stash

git stash apply stash@{0} //如果有多个,stash可以选择要恢复的stash.

2.3 feature分支

程序开发过程中,总会遇到一些,尝试性地开发。比如替换一套新的ui框架的。这个时候,成功了那就合并,但是失败了就要删除掉这些代码,不能因为这些代码影响这个master的稳定。

实际步骤:

git checkout -b feature-ui

git add ui.js

git status

git commit -m "commit ui.js"

git checkout dev

git branch -d feature-ui  //因为金费或时间,需要删除这个分支。但因为没有合并分支会删除失败

git branch -D feature-ui  /./这个命令是强行删除分支。

3.多人协作

从远程clone 版本库实际是把,远程的master分支和本地仓库的master对应起来。并且远程的版本库名称的默认名称是origin。

git remote  //查看远程的版本库的默认名称。

git remote -v //查看更多详细的信息。//在详细信息里,有(push)就可以推送,没有就是没有推送权限。

git push origin master //将mster分支推送到远程库

git push origin dev   //推送dev分支到远程版本库

总体来说,msater是发布分支要和远程保存同步需要push,dev是开发分支,也要和远程保存同步。bug分支一般没必要push,除非非要看都修复了naxie bug。feature分支要不要push看自己的考虑。

git clone git@github.com:youname/projctName.git  //克隆远程的仓库。

git checkout -b dev origin/dev //创建远程的仓库的origin 的dev分支到本地。--这里要说明的是dev分支是已经在远程建立好,本地只是创建和远程对应的本地dev分支。

git push origin dev //可能会push失败,这样就说明,本地和远程的这个分支,有冲突。解决办法是,先git pull把远程的更新拉回本地,然后解决冲突再提交。

git pull //也失败,就说明,本地的dev和远程的origin/dev没有指定对应链接。

git branch --set-upstream dev origin/dev       //指定本地dev分支和远程origin/dev的分支对应链接。指定之后就可以git pull了。然后解决冲突就可以push。

4.标签

每次版本管理都要找commit id,难记还长。好的解决方法,打标签。

git tag   //查看标签

git tag <tagname> <commitId>   //添加标签,其中的tagname是自己指定的标签,如:v1.0、v1.1 。commitId 是commit提交的时候,生成的commit id。

git show <tagname>    //查看标签的详细信息。

git tag -a <tagname> -m "descript" <commitId> //创建带有说明的标签,-a指定标签名,-m 指定说明文字。

git tag -s <tagname> -m "descript" <commitId> //创建一个用私钥签名的标签。签名采用PGP,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错:gpg: signing failed: secret key not available。

4.1 操作标签

git -d <tagname> //删除一个标签。如果打错了标签,那就删了吧。

git push origin <tagName> //将某个标签推送到远程的仓库。

git push origin --tags //将所有的本地标签推送到远程的仓库。

//推送到远程仓库的标签想要删除,麻烦。步骤:

git -d <tagname> //先删除本地的标签

git push origin :refs/tags/<tagname>  //删除远程的标签。

几个常用的命令

//以下命令都是,Git Bash here

  • mkdir <文件名>   // 创建一个子文件夹
  • cd <路径>            // 进入路径
  • pwd                 // 显示当前路径
  • rm <filename>    //  删除一个文
  • git add file //从版本库中删除文件
  • touch <文件名>  //添加文件
  • git help           //可以查看git相关命令
  • git init              // 将当前目录变成git可以管理仓库(repository)
  • git add <文件名> <文件名> //可以添加一个或多个文件(多个文件用空格隔开)
  • git commit -m "note"  //提交文件版本记录
  • git checkout -- file  // 将删除的某个文件恢复
  • git checkout -- <filename>   //撤销某个文件的修改
  • git status      // 查看工作目录状态
  • git diff           //查看修改的差异
  • git log           //显示commit 记录
  • git log --pretty=oneline        //将log精简到一行显示
  • git reset --hard HEAD^   //回到上次的版本
  • git reset --hard HEAD^^   //回到上上次的版本
  • git reset --hard HEAD~100   //回到上100次的版本
  • git reset --hard 版本编号      //回到指定的版本
  • git reset HEAD file      //撤销添加到暂存区的修改,将文件放回到工作目录
  • git reflog            //记录用户每一次记录
  • git diff HEAD -- <filename>            //查看某个文件的差异
  • ssh-keygen -t rsa -C "youremail@example.com"   //创建ssh key ,包括 id_rsa(私有)id_rsa.pub(公开),登陆GitHub,打开“Account settings”,在里面输入公有key,即可以和github进行数据推送和拉取。
  • git remote add origin git@github.com:youname/projctName.git  //添加远程的仓库到本地的仓库。
  • git push -u origin master //将本地仓库的数据push到远程,第一个要加-u 这样git 不会吧远程建立新的分支,master ,而会将本地和远程的master合并。以后再提交直接 git push origin master 即可。第一次 push 或clone 会出现警告,输入yes回车即可。
  • git pull origin master //会将远程仓库的更新拉回本地工作目录。
  • git clone git@github.com:youname/projctName.git  //克隆远程的仓库。
  • git branch //查看分支的版本。
  • git branch <name> //创建名称为 name 的分支。
  • git checkout <name> //切换分支。
  • git checkout -b <name> //创建并切换分支。
  • git merge <name> //用当前分支合并name分支1秒内完成,当然合并以后可能会有冲突,需要先解决冲突。解决后,add 并 commit 这样解决冲突。可以用git log 查看冲突的合并情况。git 也是用<<<<<<<<  ========= >>>>>>>表示冲突。
  • git checkout -d <name> //删除name分支。
  • git branch -D feature-ui  /./这个命令是强行删除分支。
  • git branch --set-upstream branchname origin/branchname // 指定本地branchname分支和远程origin/branchname的分支对应链接
  • git tag   //查看标签
  • git tag <tagname> <commitId>   //添加标签,其中的tagname是自己指定的标签,如:v1.0、v1.1 。commitId 是commit提交的时候,生成的commit id。
  • git show <tagname>    //查看标签的详细信息。
  • git tag -a <tagname> -m "descript" <commitId> //创建带有说明的标签,-a指定标签名,-m 指定说明文字。
  • git tag -s <tagname> -m "descript" <commitId> //创建一个用私钥签名的标签。签名采用PGP,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对
  • git -d <tagname> //删除一个标签。如果打错了标签,那就删了吧。
  • git push origin <tagName> //将某个标签推送到远程的仓库。
  • git push origin --tags //将所有的本地标签推送到远程的仓库。
  • git -d <tagname> //先删除本地的标签
  • git push origin :refs/tags/<tagname>  //删除远程的标签。

主要参考资料:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

												

git常用命令说明教程的更多相关文章

  1. git常用命令和linux下安装git教程

    Debian/Ubuntu下使用apt-get安装git #安装libz-dev libssl-dev $ apt-get install libcurl4-gnutls-dev libexpat1- ...

  2. sublime 集成git插件,及git常用命令

    以前用了很久的totoiseSVN,显然不够高大上,开发界的版本装x利器还得是git.然而git的命令行对没怎么用过linux的人可能觉得还不如用gitGUI,可是当你知道sublime可以集成git ...

  3. Git常用命令清单笔记

    git github 小弟调调 2015年01月12日发布 赞  |   6收藏  |  45 5k 次浏览 这里是我的笔记,记录一些git常用和一些记不住的命令,这个笔记原本是基于 颜海镜的文章增加 ...

  4. Git常用命令和Git团队使用规范指南

    转自:https://wsgzao.github.io/post/git/ 前言 在2005年的某一天,Linux之父Linus Torvalds 发布了他的又一个里程碑作品——Git.它的出现改变了 ...

  5. Git常用命令的使用方法

    推荐一个比较好的GIT的教学地址,廖雪峰老师的git教程! 这里简述Git常用命令的使用方法: 一.初始化git 右键进入 Git Bash 1.建立身份信息 git config --global ...

  6. Git常用命令及方法

    https://blog.csdn.net/web_csdn_share/article/details/79243308 Git常用命令及方法大全 下面是我整理的常用 Git 命令清单.几个专用名词 ...

  7. Ubuntu常用命令及git常用命令

    1. CMakeLists.txt中指定OpenCV路径 set(OPENCV_DIR /***/***/opencv-2.4.9) 2. cmake工程编译安装 mkdir build cd bui ...

  8. 【github】git常用命令和node项目

    这是之前在本地搞的一个小东西.因为之前电脑经常会很卡.后来发现任务管理器中多了两个不知名的进程:chromgpu.exe和flrefox.exe 乍一看以为和chrome和firefox两个浏览器有关 ...

  9. Git 常用命令总结,掌握这些,轻松驾驭版本管理

    原创 最近公司的代码管理工具要从SVN转到Git上,因此虽然之前用过Git,但是都是一些简单的推送提交,因此还是有必要进行一些系统的学习,这里做一下笔记,以备后询,且不定期更新. 关于SVN和Git的 ...

随机推荐

  1. Java关于数字工具类~持续汇总~

    /** * 01 * 描述:求int数组中最大值 * [时间 2019年3月5日下午3:21:36 作者 陶攀峰] */ public static int test01(int[]sz) { int ...

  2. 致 CODING 用户的元宵问候

    元宵快乐! 感谢您一直以来对 CODING 的理解与支持.2019 年 CODING 也走入了创业的第五个年头,为了将"让开发更简单"的愿景落地,我们做了许多探索,产品完成度也在不 ...

  3. 福利:1H1G2M云服务器限时15元/月,买2送1,一年加6个月只要180元

    平时看文章做测试只能用虚拟机的有福了,现在腾迅做活动,1H1G2M的服务器一个月只需要15元,买2送1,最多可以送6个月. 这个比之前1H1G1M10元一月的要好一些 购买地址

  4. 借助Chrome和插件爬取数据

    工具 Chrome浏览器 TamperMonkey ReRes Chrome浏览器 chrome浏览器是目前最受欢迎的浏览器,没有之一,它兼容大部分的w3c标准和ecma标准,对于前端工程师在开发过程 ...

  5. Fastadmin安装以及各种问题解决

    FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架 https://www.fastadmin.net/ 参照官方文档安装,还是有坑的 首先注意:无需下载PHP.Th ...

  6. python的进程与线程(一)

    摘要: 源地址:https://www.cnblogs.com/yuanchenqi/articles/6248025.html 如有侵权,立即删除 操作系统 学习进程和线程的知识,先了解一下底层操作 ...

  7. python接口自动化(九)--python中字典和json的区别(详解)

    简介 这篇文章的由来是由于上一篇发送post请求的接口时候,参数传字典(dict)和json的缘故,因为python中,json和dict非常类似,都是key-value的形式,为啥还要这么传参,在群 ...

  8. 网络协议 15 - P2P 协议:小种子大学问

    [前五篇]系列文章传送门: 网络协议 10 - Socket 编程(上):实践是检验真理的唯一标准 网络协议 11 - Socket 编程(下):眼见为实耳听为虚 网络协议 12 - HTTP 协议: ...

  9. 2.1命令行和JSON的配置「深入浅出ASP.NET Core系列」

    希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. 命令行配置 1.新建控制台项目 2.nuget引入microsoft.aspnetcore.all 这里要注意版本 ...

  10. Spring基础学习,附例子代码讲解

    什么是Spring.IOC.AOP.DI?     Spring是一个基于IOC和AOP的结构J2EE系统的框架.     IOC(Inversion Of Control)控制反转(Spring的基 ...