一、Git的安装

  1. 在window系统上安装:从https://git-for-windows.github.io下载,然后按默认选项安装即可;

  2. 安装完成后,在“桌面”上右击,在弹出的菜单中选择“Git Bash”;

  3. 在蹦出一个类似命令行窗口的东西里面输入git命令:

    $ git --version   //查看git安装版本
  4. 安装完成后,还需要最后一步设置,在命令行输入:

    $ git config --global user.name "Your Name"
    $ git config --global user.email "email@example.com"//因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
    

    注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

    $ git config user.name "yourname"
    $ git config user.email "xxx@ example. com"
    
  5. 通过使用 git config -l 列出在所有配置文件里共同查找的所有变量的设置值。

  6. 可以通过–unset选项来移除设置具体的配置项

    $ git config --unset --global user.name
    

二、创建版本库

什么是版本库

版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

创建版本库的步骤:
  1. 选择一个合适的地方,新建一个目录

    $ mkdir learnGit      //创建目录
    $ cd learnGit     //进入该目录
    $ pwd     //命令用于显示当前目录
    
  2. 通过git init命令把这个目录变成Git可以管理的仓库
    $ git init
    Initialized empty Git repository in /Users/michael/learngit/.git/
    //初始化一个空的git仓库在...目录下

    此时,learngit目录下有隐藏的.git目录,可以通过 ls -ah 命令,来查看learngit目录下所有文件(隐藏和未隐藏的)

把文件放到版本库
  • 把文件放到版本库的操作情境如下:

    在learngit目录里面新建一个文件,文件名为readme.txt,txt文件的内容如下:

    Git is a version control system.
    Git is free software.
    
  1. 第一步,用命令git add告诉Git,把文件添加到仓库

    $ git add readme.txt
    
  2. 用命令git commit告诉Git,把文件提交到仓库

    $ git commit -m "wrote a readme file"
    

    运行结果如下:

    [master (root-commit) cb926e7] wrote a readme file
    1 file changed, 2 insertions(+)
    create mode 100644 readme.txt//git commit命令执行成功后会告诉你,1个文件被改动(我们新添加的readme.txt文件),插入了两行内容(readme.txt有两行内容)。
    
    • git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录

    • commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

    $ git add file1.txt
    $ git add file2.txt file3.txt
    $ git commit -m "add 3 files."

三、修改版本库文件

修改文件之后:

  • git status //查看仓库当前的状态
  • git diff “指定文件名”
  • git diff HEAD – “指定文件名” //查看指定文件的修改内容(修改前、修改后文件内容对比)

查看修改的文件内容后,该改改,该加加,最后再提交文件(add和commit)

像这样,你不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

四、版本回退

查看提交历史记录
  • git log //查看提交历史
  • git log --pretty=oneline //–pretty=oneline参数 只显示commit id(版本号)

一大串类似3628164…882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

$ git log --pretty=oneline
7f44d6c6601dc6f769991144e322234cc48dbac6 (HEAD -> master, origin/master) append GPL
a11d57e4441b278305d6102263e6fc14534fbf6f readme added distributed info
9dac2d1c05c87943664ccdb1d115a3a34e9e247a edit readme.txt file
6be118b4e1cbd8539abc4191b7572f69d862c962 add other readme.txt
1943eb06c596ed9f7edf33fd2a3223141eac8b8e add a git Note file
af58caf89cc1b573f4e9a09fe299b92406fd6de3 wrote a readme file
回退到指定历史版本
  • 在Git中,用HEAD表示当前版本,从上面可以看出,最新的提交是 7f44d…c48dbac6

  • 上一个版本就是 HEAD^ ,上上一个版本就是 HEAD^^ , 当然往上100个版本写100个^比较容易数不过来,所以写成 HEAD~100

  • git reset //回退到之前版本,两种方法:

    • $ git reset --hard HEAD^
    • $ git reset --hard commit_id //版本号没必要写全,前几位就可以了

你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?

查看命令历史
  • git reflog //用来记录你的每一次命令,查看命令历史

五、工作区和暂存区

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。

工作区(Working Directory)

就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区。

版本库(Repository)

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区

暂存区就像购物车,没到付款的时候你都不确定购物车里的东西全部都是要的。。。每拿一件商品就付一次款。。。那才麻烦大了

把文件往Git版本库里添加的时候,是分两步执行的:

  • 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

  • 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

  • 例子:对readme.txt做个修改,然后,在工作区新增一个LICENSE文本文件(内容随便写)

  • 先用git status查看一下状态:
    Git非常清楚地告诉我们,readme.txt被修改了,而LICENSE还从来没有被添加过,所以它的状态是Untracked

  • 现在,使用两次命令git add,把readme.txt和LICENSE都添加后,用git status再查看一下

  • 现在,暂存区的状态就变成这样了:

  • 所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
  • 现在版本库变成了这样,暂存区就没有任何内容了:

六、管理修改

  • Git比其他版本控制系统设计得优秀的点在于:Git跟踪并管理的是修改,而非文件
  • Git是如何跟踪修改的:每次修改,如果不add到暂存区,那就不会加入到commit中。

七、撤销修改

当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时

git checkout 可以丢弃工作区的修改:

  • git checkout – file

    – 很重要,没有 --,就变成了“切换到另一个分支”的命令

命令 git checkout – readme.txt 意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

  • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

当你不但改乱了工作区某个文件的内容,还添加到了暂存区,想丢弃修改时

分两步:

  • 第一步用命令git reset HEAD file,就回到了上面一个场景,
  • 第二步按上面一个场景操作。
已经提交了不合适的修改到版本库时:

想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

八、删除文件

在Git中,删除也是一个修改操作

你新建了一个文件(test.txt),提到交了版本库,然后你把这个文件删除了:
$ rm test.txt
有两种删除的可能:

一种是你真的要删除,另一种是你误操作:
真删除或误删前,可通过git status查看下仓库状态

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    test.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
  • 如果是真要删除:
    那就用命令git rm删掉,并且git commit
$ git rm test.txt
rm 'test.txt'$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt1 file changed, 1 deletion(-)delete mode 100644 test.txt
  • 如果是误删除:
    那就可以通过git checkout – file 很轻松地把误删的文件恢复到最新版本
$ git checkout -- test.txt

git checkout 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

九、

创建SSH
  1. 打开Git Bash,创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"

然后一路回车,使用默认值即可;
之后顺利的话,能在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
2. 登陆GitHub,打开“Account settings”,“SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。

为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

获取公有密钥
cat ~/.ssh/id_rsa.pub
添加远程库

现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得。

  1. 登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库

  2. 在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库

  3. 目前,在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

    • 现在我们根据GitHub的提示,在本地的learngit仓库下运行命令
    $ git remote add origin git@github.com:shiaijuan/learngit.git
    

    添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

    • 把本地库的所有内容推送到远程库上
    $ git push -u origin master
    

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

  4. 从现在起,只要本地作了提交,就可以通过命令

    $ git push origin master
    

注意点:
  1. 如果执行git remote add origin …,出现错误:

    fatal: remote origin already exists

    则执行以下语句:

    git remote rm origin

    再往后执行

    git remote add origin … 即可。

  2. 在执行git push origin master时,报错:

    error:failed to push som refs to…

    则执行以下语句:

    git pull origin master
    //先把远程服务器github上面的文件拉先来,再push 上去。

    引起该错误的原因也可能是目录中没有文件,空目录是不能提交上去的


从远程库克隆

假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。

  1. 在github上建一个仓库

    • 勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件
  2. 用命令git clone克隆一个本地库(克隆本地库之前,你要先确认本地库位置)
$ git clone git@github.com:shiaijuan/gitskills.git

给已经存在的项目添加git

前提:先去gitlab或github网站上创建一个新项目,完毕后记得添加.ignore;

1、打开终端,cd到已存在项目的目录,输入以下命令行,初始化一个本地仓库:

git init

2、创建 .gitignore 文件,在里面添加不要上传的文件的相应的匹配正则

/node_modules
/dist

3、输入以下命令,把工程所有文件都添加到该仓库中(千万别忘记后面的.号!!!):

git add .

4、输入以下命令,把文件提交到本地仓库:

git commit -m "Initial commit" //Initial commit是提交代码的说明文字

如果出现nothing to commit, working directory clean​说明你已经提交好了。

​5、输入以下命令,添加远程仓库地址:

输入:git remote add origin + 你的仓库地址

例如:git remote add origin https://git.oschina.net/hhh/GitDemo.git

如果出现fatal: remote origin already exists.说明你已经添加过远程仓库了,输入以下命令删除远程仓库:git remote rm origin,然后再次执行第5步。

6、输入以下命令,把文件提交到远程仓库:

git push -u origin master

然后你就等着它提交完成就完事了。

7、假如第6部失败的话再执行git pull –rebase origin master命令,然后再执行git push -u origin master即可上传成功。

8、完事后假如还是不能拉代码的话再重启项目执行git branch –set-upstream master origin/master即可。

9、报错:Updates were rejected because the tip of your current branch is behind

解决方法:
有如下几种解决方法:

  1. 使用强制push的方法:
$ git push -u origin master -f

这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。

  1. push前先将远程repository修改pull下来
$ git pull origin master
$ git push -u origin master
  1. 若不想merge远程和本地修改,可以先创建新的分支:
$ git branch [name]

然后push

$ git push -u origin [name]
小结
  • 要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
  • 关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
  • 此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改

问题

  1. git 报错—fatal: Not a git repository

    • fatal: Not a git repository (or any of the parent directories): .git。提示说没有.git这样一个目录
    • 解决办法如下:git init就可以了!

Git学习笔记 -- 安装git、创建版本库、时光穿梭、远程仓库相关推荐

  1. Git 的安装和创建版本库 。

    Git 的优点就不再多说了 .直接进入正题吧 . 安装Git 首先可以尝试输入 Git 看看有没有反映 . $ git The program 'git' is currently not insta ...

  2. 本地Git下载安装以及创建版本库、远程Github

    Git下载安装 windows:在git官网下载安装程序即可.点击git bash,出现命令行窗口说明安装成功. CentOS 7:root权限下,输入yum install git.如果非root权 ...

  3. Git学习(1)-本地版本库的创建

    我用的是Git-2.14.3-64-bit版本,在windows64位上运行的,把软件分享下链接:http://pan.baidu.com/s/1jIoZ7Xc 密码:13q2. 安装及配置自行百度, ...

  4. 【GIT 基础篇二】创建版本库与提交

    最近在项目过程中,着实是犯懒了,虽然公司使用git管理,但是感觉自己已经严重的依赖页面工具了,这次正好借助公司不是很忙,把git常用的命令整理记录一下,今天我们主要就是整理创建仓库以及修改提交功能. ...

  5. Git学习笔记:Git简介

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 目 ...

  6. GIT学习笔记(git工具安装与配置)

  7. 【学习总结】Git学习-参考廖雪峰老师教程三-创建版本库

    学习总结之Git学习-总 目录: 一.Git简介 二.安装Git 三.创建版本库 四.时光机穿梭 五.远程仓库 六.分支管理 七.标签管理 八.使用GitHub 九.使用码云 十.自定义Git 期末总 ...

  8. Git学习笔记:远程仓库

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  9. Git 的安装与初次使用 —— Git 学习笔记 03

    Git 的安装与初次使用 -- Git 学习笔记 03 Git 的安装与初次使用 -- Git 学习笔记 03 安装 Git 在 Linux 上安装 在 Windows 上安装 初次运行 Git 前的 ...

最新文章

  1. 计算机办公高级试题,高级办公软件试题及解答
  2. html5做咖啡网页素材,HTML5/CSS3咖啡品类切换动画
  3. Linux环境编译时报错/lib64/libdl.so.2: could not read symbols: Invalid operation
  4. 怎么得到16位校检和-c语言,16位CRC校验C语言算法.pdf
  5. 在线编辑Excel——插入图表
  6. python大漠插件官网视频教程_python调用大漠插件教程01注册大漠
  7. 关于名为民间借贷实为诈骗案件的讨论
  8. Ember controller
  9. dell进入u盘启动模式_Dell戴尔笔记本bios设置u盘启动详细步骤
  10. python问题unindent does not match any outer indentation level在pycharm平台的解决方法
  11. 【mysql】In aggregated query without GROUP BY, expression #1 of SELECT list contains ......
  12. 姜汝祥是个骗子吗_我是个骗子你是?
  13. 新点互联互通_新点驱动(江苏省互联互通版)
  14. js原生拖拽的两种方法
  15. 网络原理考点之无线网络应用层协议
  16. PicPick的安装方法
  17. 注册一级建造师和注册二级建造师有什么区别
  18. Matlab 元胞数组和结构体
  19. 从与迪思杰签约 看浪潮主机生态如何布局?
  20. 关于图灵JAVA一百道面试题总结

热门文章

  1. 更新日志 150930 - 视频时代
  2. pdcch加扰_pdcch的功能
  3. Python 之有道翻译数据抓取
  4. 建造者模式(Builder模式)详解
  5. K-均值聚类学习思考
  6. C. Dominated Subarray(思维)
  7. Chat GPT4来了,它和3.5区别在哪?李宏毅机器学习笔记
  8. 【ParaView教程】1.2 可视化基础
  9. nRF2401跨平台通讯
  10. FFmpeg 从零开始开发简单的音视频播放器(一)