git学习记录

1、git是使用c语言开发的;

2、集中式和分布式版本控制系统有什么区别:

  集中式:代码统一存放在中央服务器的,写代码的时候必须从中央服务器下载最新的代码然后才能在自己电脑上改;改完之后需要再推送回去;

      代表作:CVS(用的比较多),SVN(微软开发的,几乎不用了); 

      缺点:必须联网上传下载,速度慢;

  分布式:每个人都有一份完整的代码版本库,每个人都负责改自己负责的部分,等到上传的时候,只需要上传修改的地方给对方即可,安全性能相对于集中式要高很多;

      代表作:GIt、BitKeeper、Mercurial、Bazaar

      缺点:1}资料少;2)学习周期相对而言比较长;3)不符合常规思维;4)代码保密性差;

3、安装:

  Linux:

  查看安装系统:输入git检查是否安装;

  安装指令:sudo apt-get install git

  windows:

  安装:到git官网下载相关的压缩包;

  全局配置:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

4、初始化仓库:

  1)创建一个本地目录作为版本库(repository),创建时,Git自动为我们创建了唯一一个master分支;

  2)通过git init 把仓库变成git 可以管理的仓库(没事别瞎该里面的配置,容易崩),初始化之后会多出一个.git的目录;

  3)添加文件到版本库中,也就是刚才创建的仓库;

5、将文件放入到仓库:

  1)用命令git add 告诉git,把文件添加到仓库,实际上就是把文件修改添加到暂存区;eg:git add readme.txt;

  2)用命令git commit,把文件提交到仓库 (commit可以一次性可以提交很多文件),实际上就是把暂存区的所有内容提交到当前分支;eg:git commit -m "说明性语言";

  3)用命令git status查看结果,该命令可以让我们时刻掌握当前仓库的状态;如果文件修改没有被提交,就会提示修改没有被提交的信息;

  4)用命令git differ <filename>查看filename文件修改之后的difference;

  5)用命令git log 查看历史修改记录;后面加上--pretty=oneline参数可以让历史记录更整洁,当然,前面出现的一串莫名其妙的字符串那个是自动产生的提交的版本号;

    --graph可以看到分支合并图 --abbrev-commit 提交校验码缩略显示

  6)用命令git reset -hard HEAD^ 表示回退到上一个版本,HEAD表示当前版本,HEAD^表示上一个版本,HEAD^^表示上上个版本;如果往前一百个版本用HEAD~100;

    git reset -hard <版本号(不用写全)> 可以通过该方法回退到某一个版本号,版本号可以使用git log查看

  7)用命令cat <filename> 能够将filename中的内容显示出来;

  8)用命令git relog 可以查看之前的每一个命令的记录;主要是后悔用来回退到未来版本;

  9)修改的时候,如果第一次修改后git add <file> 然后第二次修改,git commit -m "描述",则第二次修改是不会被提交的,原因很简单,因为第二次修改没有添加的缓存 

            而git commit的时候只能提交缓存区的修改到主分支;

  10)用命令git checkout --<filename> 把文件在工作区的修改全部撤销

    两种效果:(1)修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

         (2)已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态;

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

    注意:git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

  11)用命令git rm <filename> 确认删除掉文件(首先需要删除掉文件,然后使用git status检查文件),如果确认删除改文件,执行该命令,并且提交掉;如果删除错误,可                以使用上面的git checkout --file 命令回复到之前的状态;

6、添加远程库:

  1)登录github创建远程库,前面的创建的是本地仓库;

  2)关联本地仓库到远程库 git remote add origin 远程库的url (eg:git @github.com:merrial/test.git); 

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

  3) 把本地库的所有内容推送到远程库上: git push -u origin master;

    把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程

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

    以后再提交就可以直接使用git push origin master;

  4)从远程库克隆:git clone <远程URL>

7、分支管理:

  1)使用命令git checkout -b <branchname> 来创建分支,其中,-b表示 创建并切换,

    此命令相当于 git branch <branchname> 创建分支和 git checkout <branchname>切换分支

  2)使用命令git branch来查看所有分支;但是在当前的分支前面会增加一个*号;

  3)使用命令git merge <branchname> 合并分支上的工作成果到主分支master上: --no-ff 表示禁用 fast-forward 可以用普通模式合并,

     合并后的历史有分支,能看出来曾经做过合并

     注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

     当然,也不是每次合并都能Fast-forward,我们后面会讲其他方式的合并。

  4)使用命令git branch -d <branchname>来删除分支;使用git branch 查看就剩下master分支了;

  5)新版本使用命令git switch -c <branchname>来创建并且切换到新的分支;原因如下:

    

   6)使用命令git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作; 使用git stash list 查看所有的工作现场;

   7)使用命令git stash apply恢复stash内容后,stash的内容并没有被删除,需要使用 git stash drop来删除;使用git stash pop,当恢复的同时把stash 内容也删了;

   8)使用命令cherry-pick 复制一个特定的提交到当前分支

   9)使用git remote -v 查看远程库的信息(加上-v更详细);

  10)推送分支,git push origin master/git push origin dev;

  11)拉取分支代码 git pull;  

  12) git pull 失败,使用git branch -set-upstream-to=origin/dev dev   指定本地dev分支与远程origin/dev分支的链接,根据提示,设置devorigin/dev的链接;

 8、 详细Git指令大全:https://blog.csdn.net/q844258542/article/details/52237906

 

参考:

(参照廖雪峰老师git教程https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424

补充知识(https://www.cnblogs.com/yongjieShi/p/8512852.html):

  cat命令两个常用的用法是:

  cat file.txt能够将txt中的内容显示出来

  cat file1.txt file2.txt file3.txt > file_total.txt命令可以将上面四个txt文件合并为一个名字为file_total.txt的文件;

posted @ 2019-11-14 00:41  Merrial  阅读(124)  评论(0)    收藏  举报