今天我们来搞一下Git

这东西虽然没啥搞头儿,但是开发当中还必须得会用,谁让你我都是苦逼的开发呢~~~~

一、下载与安装

这玩意简单,给你赋个图片,自己研究一下~~~~

1.官网:https://git-scm.com/downloads

2.下载:

3.主要事项:

还有安装的路径,尽量都是英文,别整中文

4.安装完成,需要做进一步的设置

  • 打开这个图标:

                                 

  • 打开后的样子(版本不一样,可能有点差别,大同小异)

          

  • Git是分布式版本控制系统,所以需要填写用户名邮箱作为一个标识。

    命令:

    设置用户名:git config --global user.name "你自己的用户名"

    设 置 邮 箱: git config --global user.email "你自己的邮箱"

          

  • 验证是否设置成功

    在你的Windows系统中,C:\Users\admin下(大部分是这个路径),找到 .gitconfig 文件里可以看到跟你配置的信息一致,说明设置成功

          

二、实操

1.创建版本库

首先在你的任意盘符下,执行以下操作,我的习惯是在某个盘下建个文件夹来当做git的版本库(暂时就是一个文件夹,还不是版本库,这点要明确)

比如:我在 G:\JavaInstall\ 下建个文件夹叫gitHome

那么就在gitHome 文件夹的里面 一定是里面 ,点击鼠标右键,找到 Git Bash 打开,出现如图:

这个其实就是用git的窗口打开的这个文件,主要这个路径,用于创建版本库

  • 下面开始创建版本库

    命令 : git init

此时可以看到 在你的gitHome 文件夹下出现个 .git (若没有显示,则去开启隐藏文件)

所以此时,你的 .git 就是你的本地库

  • 打开.git 会出现以下文件,我来做下详解

2.文件新建+状态查看+新增+提交+新增文件内容

  • ① 查看本地版本库的各个文件的状态 : git status

    例子:是用 touch 命令新建一个 a.txt文件,但此时要明确,a.txt文件还不属于git版本库,必须加入到git版本库才行

    重要的一点,此时执行了git add a.txt之后,虽然应加入到了git的版本库,但是此时只是加入到了git的临时库,必要进行 commit

    执行 git commit a.txt 出现以下信息

    表示此时你需要键入你改变的信息,否则'#'部分将会被忽略,并且将会提交一个空文件

    意思就是 你需要再写一遍 你要提交的文件,那太麻烦了,于是 q! 命令,不保存退出

    使用另一种方法:

    命令: git commit -m "create file" a.txt

    OK,完成以上的步骤,才算真正的将a.txt 文件纳入git管理;

  • ② 修改刚才的a.txt文件,会发现git的不同之处

    命令:vim a.txt 增加几条数据

    【注】:在git更新一个文件时,原本已经将a.txt文件纳入到管理中了,修改该文件后,还需要再纳入一遍,它不会将原有已经在版本库中的文件直接保存

    命令依次:git add a.txt

    git commit -m "update file" a.txt

    git status

3.日志+版本号+对比不同

3.1查看日志:

① git log a.txt

② git log --pretty=oneline a.txt



这两种查看git日志的方式
第一个显示信息比较全,作者啊,时间啊,以及对文件是create 还是 update啊,都显示的清晰,但是往往格式太占用屏幕,显示不全
第二种,显示的就是具体做个啥操作,一行显示完全,不去关心谁创建的,谁修改的等信息

3.2 版本号

在执行更新操作的时候,尽量加个版本号:
如:git commit -m "update file 01" a.txt
这个 "01" 就是版本号,每次对该文件进行更新操作时,尽量给个版本,方便以后查找对比

3.3 对比不同

命令:git diff a.txt

4. 版本回退+版本穿梭+版本撤销

4.1 版本回退

命令:git reset --hard HEAD^     【注】:HEAD是个指针,^:表示回退一步

4.2 版本穿梭

① 命令: git reflog a.txt  查看所有日志记录的指针

② 根据上一步的指针,选择要回退到哪一个位置

以上是回退一步,或者回到指定的步骤
那么当要回退到很多步呢?
使用命令:git reset --hard HEAD~4 :表示回退4步



4.3 版本撤销

命令:git checkout -- a.txt

小总结:
1.库,首先得是个git库 git init
2.得有个东西管理,新建个文件 touch a.txt
之后,向里面填东西,首次的话叫纳入git管理 git add a.txt
3.git commit -m "create file" a.txt 提交到自己的本地库
4.git log 查看git的各种日志
5.git status 查看当前版本库的状态
6. git commit 相当于往前走,那么 就有往后退 git reset --hard HEAD^ 表示往后退一步
其中,一个 ^ 表示退一步,多个 ^ 表示退多步
7.版本穿梭 用git reflog a.txt 查出他的全部指针版本号
再结合 "git reset --hard 7位版本号" 穿梭到想要的版本
8.撤销 使用 "git checkout -- 文件名"

5. 理解工作区+版本库+暂存区

5.1 工作区

工作区(Working Directory):就是你电脑本地硬盘目录

5.2 版本区

版本库(Repository):工作区有个隐藏目录.git,它就是Git的本地版本库

5.3 暂存区

暂存区(stage):一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

当在工作区时  撤销要用 "git checkout -- a.txt"
当在暂存区时 撤销要用 "git reset HEAD a.txt" 再 "git checkout -- a.txt"
当在版本区时 撤销要用 "git reset -hard HEAD^" Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用“git add”把文件纳入Git管理,实际是把本地文件修改添加到暂存区;
第二步是用“git commit”提交更改,实际上就是把暂存区的所有内容提交到当前分支 。 因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以commit就是往master分支上提交更改。 可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。一旦提交完后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的。即:nothing to commit (working directory clean)。 用“git diff HEAD -- filename”命令可以查看工作区和暂存区里面最新版本的区别。
新建过撤销未add: git checkout -- 文件名
撤销已add未commit:先git reset HEAD 文件名 再 git checkout -- 文件名
撤销已add已commit: git reset –hard HEAD^ 所以,一定要明确,当前所操作的文件是在git的哪一个区,才能保证执行前进和回退的正确性

5.4 删除命令

① git rm a.txt
② git commit -m "delete a.txt" a.txt 即 在git中删除要执行两步操作,虽然删了,但是还得提交一下

5.5 分支(查看+新建+切换+合并(分支名)+删除)

  • 5.5.1 查看分支

    • 命令:git branch

  • 5.5.2 新建分支

    • 命令:git branch 分支名



  • 5.5.3 切换分支

    • ① 命令: git checkout 分支名

    • ② 命令:git branch -b 分支名 :表示把分支和切换用一个命令完成

    而且,子分支会把master(主分支)里的内容,copy出同样的一份到自己的分支里,目的就是尽量不要在主分支中去操作

  • 5.5.4 合并分支

    • 命令:git merge 分支名

    【注】:在子线上干活,在主线上合并

  • 5.5.5 删除分支

    • 命令 git branch -d 分支名

    【注】:要保证子线跟主线的内容一致,所以每次合并完之后,删除子线,然后再新建个子线,把内容和主线永远保持一致

5.6 版本冲突

  • 子分支 在a.txt文件内增加数据

  • 主分支 在a.txt同一个位置增加不同的数据

  • 合并 发现存在冲突

  • 查看冲突 ,进行人工干预,将冲突的符号删除

  • 删除后的效果 (千万别把队友提交的数据删除了)

  • 加入版本库 然后提交

    这样冲突就解决了,就是手动把冲突删掉

三、GitHub 使用 与 git 协同办公

github是一个git项目托管网站,主要提供基于git的版本托管服务

github是一个基于git的代码托管平台, Git 并不像 SVN 那样有个中心服务器。目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作。 你就需要将数据放到一台其他开发人员能够连接的服务器上

1.GitHub的应用:

 第一步 注册+检查.ssh秘钥:由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息(No such file or directory表示第一次)

第二步 创建SSH Key: ssh-keygen -t rsa -C 11111@126.com成功的话会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key。



第三步 粘贴id_rsa.pub 的内容到 GitHub,注意粘贴的内容一定要恰好,不要多一个空格或者少一个空格
操作依次为:登录GitHub → 头像位置找到settings → 选择左侧菜单的 SSH and GPG keys → 左上角 New SSH key → 起个名 粘贴公钥





第四步 测试连通性: ssh -T git@github.com

表示连接成功了,此时再回到你的 .ssh 文件 ,会多了一个名字为 known_hosts文件

第五步 本地 → github远程库

	现在的情景是,我在本地创建了一个OA项目后,我又想在GitHub创建一个OA项目,并且让这两个仓库进行远程同步
5.1 先在本地新建好一个git项目

	5.2  到Github上新建一个同名的空项目 (是同名  我这里后来又建了一个,忘记修改,都默认oa.txt即可)



	5.3  本地和github上的仓库进行关联
命令:git remote add origin https://github.com/zzyybs/oa.git

	5.4 把本地库的内容推送到远程git push命令,实际上是把当前分支master推送到远程
命令:git push -u origin master 命令:git pull origin master : 是从远程库的master 下载到 本地库的 master



由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

第六步 github远程库 → 本地

现在的情景是,我们从零开发,那么最好的方式是先创建远程库,然后从远程库克隆

6.1  登陆GitHub,创建一个新的仓库,名字叫OA2
6.2 远程库OK,下一步是用命令git clone克隆一个本地库
Git clone git@github.com:xxx/oa2.git

7.远程交互模型 -- 上

7.Git交互模型-下

一般工作流程如下:

	1 克隆 Git 资源作为工作目录。

	2 在克隆的资源上添加或修改文件。

	3 如果其他人修改了,你可以更新资源。

	4 在提交前查看修改。

	5 提交修改。

	6 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

8.Fork

现在的情景是,用叉子把别人的东西(copy no cut)叉到你碗里~
就是把别人的项目clone一份,但是owner变成自己,这样你就可以在遵守Open source license的前提下任意修改这个项目了。 相当于你在原项目的主分支上又建立了一个分支,你可以在该分支上任意修改,如果想将你的修改合并到原项目中时,可以pull
request,这样原项目的作者就可以将你修改的东西合并到原项目的主分支上去,这样你就为开源项目贡献了代码,开源项目就
会在大家共同的努力下不断壮大和完善。

9.解决Git push时重复输入用户名密码
C:\Users\admin目录下新建名字为_netrc的文件并编辑该文件写如下内容:
machine github.com
login 你的用户名
password 你的密码 比如:
machine github.com
login li4
password 123

10.Git 常用命令小总结
mkdir: XX (创建一个空目录 XX指目录名)
pwd: 显示当前目录的路径。
git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
touch xx文件或者新建文件
git add XX 把xx文件添加到暂存区去。
git commit –m “XX” 提交文件 –m 后面的是注释。
git status 查看仓库状态
git diff XX 查看XX文件修改了那些内容
git log 查看历史记录
git reset --hard HEAD^
cat XX 查看XX文件内容
git reflog 查看历史记录的版本号id
git checkout -- XX 把XX文件在工作区的修改全部撤销。
git rm XX 删除XX文件
git remote add origin https://github.com/zzyybs/testgit 关联一个远程库
git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库
git clone https://github.com/arjrzhouyang/testgit 从远程库中克隆
git checkout –b dev 创建dev分支 并切换到dev分支上
git branch 查看当前所有的分支
git checkout master 切换回master分支
git merge dev 在当前的分支上合并dev分支
git branch –d dev 删除dev分支
git branch name 创建分支
git remote 查看远程库的信息
git remote –v 查看远程库的详细信息
git push origin master Git会把master分支推送到远程库对应的远程分支上 常用基本操作命令25个左右

Git 与 GitHub 入门级的更多相关文章

  1. 简单使用Git和Github来管理自己的代码和读书笔记

    原文链接:http://my.oschina.net/bxxfighting/blog/378196   先注册github.com的账号官方网站: https://github.com/ 注册界面, ...

  2. git for windows 的默认工作路径(HOME)的设置以及Git与GitHub之间的SSH加密协议

    1.安装及配置默认路径 Windows中从GitHub上面:https://git-for-windows.github.io/ 下载安装好git后(双击,改一下需要的安装路径,一路确定就好了),安装 ...

  3. git与github安装、配置、pull、push

    操作系统是Ubuntu 16.04 LTS 64bit 1 安装git (1)安装 sudo apt-get install git-core (2)一些全局变量的初始化 在本地建立一个文件夹,然后做 ...

  4. 转:sublime上使用git连接github

    "工欲善其事,必先利其器." 这是古人的教诲,也是一个高效率的工程师需要遵循的法则之一.从大学开始写Java使用了JBuilder,Eclipse,后来写PHP用了Zend,写Ja ...

  5. git与github使用

    Git和Github简单教程 目录: 零.Git是什么 一.Git的主要功能:版本控制 二.概览 三.Git for Windows软件安装 四.本地Git的使用 五.Github与Git的关联 六. ...

  6. linux下git以及github的连接与使用

    简单理解 Git 的思想和基本的工作原理,能够更好的进一步和使用Git.在开始学习Git 的时候,最好不要把Git的各种概念和其他的版本控制系统诸如 Subversion 等相比,否则容易混淆每个操作 ...

  7. Git和Github简单教程

    原文链接:Git和Github简单教程 网络上关于Git和GitHub的教程不少,但是这些教程有的命令太少不够用,有的命令太多,使得初期学习的时候需要额外花不少时间在一些当前用不到的命令上. 这篇文章 ...

  8. Git和Github简单教程(转)

    这篇文章只挑一部分命令来讲,差不多够用就行的程度.如果需要其他命令,到时候再去其他地方了解就行了先在Github上写好再搬过来的:本文Github链接 目录: 零.Git是什么 一.Git的主要功能: ...

  9. WebStorm和sublime上使用git连接github(转)

    WebStorm使用git连接github的方法: 用webstorm上传代码时,首先要先下载git,网址一搜就可以搜到,安装git,并且把ssh配置到github上.然后开始配置webstorm,打 ...

随机推荐

  1. vscode添加vue格式化插件

    1.安装Vetur插件 2.ctrl+,打开用户设置,找到"vetur.format.defaultFormatter.html": "none",

  2. @staticmethod和classmethod

    之前一直搞不清楚这两个类方法有什么区别,今天着重学习了一下 @staticmethod是静态方法,不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样. class C(object): ...

  3. vimrc同步文档

    目录 vimrc ims.vim vimrc if has("syntax") syntax on endif set nocompatible "取消vi 兼容模式 & ...

  4. mybatis BindingException: Invalid bound statement (not found)

    错误截图 解决措施 此异常的原因是由于mapper接口编译后在同一个目录下没有找到mapper映射文件而出现的. 通常我们在配置SqlSessionFactory时会有如配置 <!-- 配置Sq ...

  5. javascript常用的操作

    1.concat()  连接两个或更多的数组,并返回一个新的数组.注意:该方法不会改变原数组 var arry1=["李四",“王二”]:  var arry2=['赵柳',“李旺 ...

  6. 关于 div 的 contenteditable 使用,placeholder 和 复制图片显示并上传,按住 enter+ctrl 内容换行

    当使用文本编辑的时候,首先会使用 textarea ,但是,这个里面不能加入其它标签,也就是不能富文本化. 于是可以使用 contenteditable 就是给 div 加上该属性.就变得丰富起来.使 ...

  7. PHP GZ压缩与解压

    /*将字符串添加至GZ文件*/ function gz_str($str,$gz_name){ $fp = gzopen ($gz_name, 'w9'); gzwrite ($fp, $str); ...

  8. centos7.5固定局域网ip

    有点时候,比如像我们单位,没事干就停一次网,结果ip变了,还得重新看ip,重新配置,很麻烦,所以干脆把自己ip固定,以不变应万变!!! 1.首先查看自己的ip是什么: $ ifconfig eno1: ...

  9. Python 操作 MySQL 的5种方式(转)

    Python 操作 MySQL 的5种方式 不管你是做数据分析,还是网络爬虫,Web 开发.亦或是机器学习,你都离不开要和数据库打交道,而 MySQL 又是最流行的一种数据库,这篇文章介绍 Pytho ...

  10. 外网无法ip访问服务器解决方法 (原)

    示例ip:119.75.1.1      windows server示例 一.检查网络是否通畅     打开dos窗口(windows+r , 输入cmd回车  )输入命令: ping 119.75 ...