Git学习笔记

来源:互联网 发布:珠江新闻眼回看软件 编辑:程序博客网 时间:2024/06/05 01:01

Git学习笔记

导语:

Git学习笔记

一、Git简介

git
git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何大小项目的版本管理。与CVS相比,它不是把版本库放在集中的存储服务器,而是每个开发者电脑上都是一个版本库,无须联网就可以管理代码版本,并且分支管理更高效,切换更快捷方便,已经成为现在开发者主流版本控制工具。

二、前言

git仓库初始的创建通常有两种方式,一种是自己本地创建项目,再链接到远程仓库。另一种是先创建远程仓库,再将远程仓库克隆(git clone)到本地。接下来我就分别从这两个方式讲解。

三、本地仓库创建

  1. 初始化仓库
    $ mkdir gitstudy 
    $ cd gitstudy
    $ git init
  2. 加入暂存区
    $ git add hellogit.txt 

    $ git add -A 或者 git add . //是添加全部文件 
  3. 将文件加入历史版本
    $ git commit -m "add hellogit file" //-m是该版本的说明语句 
  4. 与远程仓库链接
    $ git remote add origin https://gitcafe.com/jiyiren/gitstudy.git 
  5. 提交到远程仓库
    $ git push -u origin master //-u 第一次提交让git记住本地仓库与远程仓库 
    //的连接,以后可以不要

四、远程仓库先创建

  1. 创建远程仓库,可以到github或者gitcafe或者gitosc等
  2. 将远程仓库克隆(clone)下来,本地就会有对应的文件夹仓库
    $ git clone https://gitcafe.com/jiyiren/gitstudy.git 
  3. 修改后加入暂存区,提交到历史版本,再推送到远程
    $ git add -A 
    $ git commit -m "modify hellogit file"
    $ git push origin master

五、版本管理

1. 说明

我们有两个仓库,一个本地仓库,一个远程仓库,两个仓库互相关联。本地仓库为了开发代码,远程仓库为了记录版本和保存正确的代码。git的主要功能都应该在我们本地仓库里使用,那git具体怎么管理代码的呢?这要先从本地仓库的划分说起。本地仓库也就是开发的文件夹里,分为工作区暂存区历史版本区,工作区就是我们实际操作的区域,暂存区就是git add后文件进入的暂存状态,历史版本区是git commit后文件记录在历史版本里的区域。我们的git push就是向远处推送历史版本区的内容,工作区和暂存区为我们的版本回退提供方便。

2. 重要命令解释

  1. $ git status 查看当前的工作区的状态,通常有三种状态,一种是工作区干净: nothing to commit, working directory clean, 一种是使用了git add之后,显示Changes not staged for commit(提示有已添加但是未提交的修改) ,一种是新添加文件后,显示Untracked files(提示有未跟踪的文件)

  2. $ git diff命令:
    diff

    • 这个命令的理解点就是在参照物,也就是对比双方是谁。
    • $ git diff 图片中1标号内容,该句将工作区的修改与暂存区对比。例如:$ git diff mtest.txt
    • $ git diff --cached 图示2标号,这句则是将
      暂存区与本地历史版本区中的最新版本对比。例如:$ git diff --cached mtest.txt
    • $ git diff HEAD图示3标号,这句是将本地工作区(包含了暂存区内容)与本地历史版本区里的最新版本对比。如:$ git diff HEAD -- mtest.txt,此处文件名要用--分隔,前后都有空格。
    • 图示4和图示5分别为两个历史版本id对比和本地与分支的对比。这个用的都比较少。
  3. 显示提交版本历史记录

    • $ git log或者$ git log --pretty=oneline 可以显示我们提交版本的记录,按照从近到远的版本显示。
    • $ git log --graph --pretty=oneline 可以显示分支状态:

      gitlog

    • $ git log --graph --pretty=oneline --abbrev-commit这个是简短形式:

      shortlog

    • 主要是git log结合多种参数显示各种结果具体参数请看git log参数
  4. git reset --hard <版本> 回退版本,有两种方式,一种是相对回退,我们都知道HEAD默认指向当前分支的最新历史版本,而git给了我们一种以HEAD方式的相对语句就是HEAD^ 这个代表当前版本的上一个版本,HEAD^^ 代表当前版本的上上一个版本,可以一直加^向上的箭头来回退版本。当然如果回退个数很多比如100个,那个写100个^也麻烦,所以有缩写就是HEAD~100

    $ git reset --hard HEAD^ //回退到上一个版本$ git reset --hard HEAD~100 //回退到上100个版本

    另一种方式是绝对回退,上面的命令$ git log --pretty=oneline可以显示历史提交版本的commitid,当然很长,但是记录前面7个数字就可以了标识一个版本了。

    $ git reset --hard 3628164 //回退到3628164..的版本
  5. git reflog 这个是命令历史记录。当我们回退到上一个或者几个版本时,我们用$ git log命令查看的只能显示是当前版本以及当前版本之前的,那比当前版本还新的版本我们就看不到了,那怎么办?git reflog就可以显示我们所有操作的命令历史,注意与git log的区别,git log是版本历史记录,git reflog是命令历史记录。从这个里面就可以找到最新版本的commitid,就可以回退到任意一个版本。
  6. 撤销修改,其实回退版本也相当于撤销修改了,但是有特别的几个命令比较常用,这里讲下。
    • git checkout -- filename 这个是将工作区下的文件恢复到暂存区下的状态,取消本地未暂存的修改,暂存区不请空,也就是如果你后来的修改将被撤销。如:$ git checkout -- mtext.txt
    • git reset HEAD filename 这个是将暂存区的修改恢复到本地工作区,暂存区将清空。如:$ git reset HEAD mtext.txt

六、分支与合并

1. 说明

2. 命令解释

  1. 查看分支
    $ git branch //查看本地分支 
    $ git branch -r //查看远程分支
    $ git branch -a //查看所有分支(包括本地和远程)
  2. 创建分支
    git branch develop //创建develop分支
  3. 切换分支
    git checkout develop //切换到develop分支
  4. 创建并切换分支
    git checkout -b mdeve //创建并切换到mdeve分支
  5. 删除分支
    git branch -d mdeve //删除mdeve分支,强行删除用-D
  6. 合并分支默认ff模式
    git merge mdeve //合并mdeve分支到当前分支

    默认合并方式是Fast-forward,也就是将要合并的分支直接向当前分支提交。没有提交信息
  7. 解决冲突

    很多时候用Fast-forward方式直接提交是不成功的,因为有冲突存在,所以我们要手动解决冲突

    $ git merge feature1 //合并feature1分支

    不成功的结果如下:

    merge

    Git用<<<<<这个箭头表示HEAD当前分支,====这个为分隔线,>>>>>>这个为feature1分支里的内容,只要手动删除这三处并自己选择内容作为最终结果。

  8. 合并分支禁ff模式合并

    $ git merge --no-ff -m "merge no ff" dev //采用no ff模式合并并添加了信息提示

    Fast-forward模式合并直接向当前分支提交,这种模式下如果删除掉分支,就会丢掉分支信息
    如果用no ff这种模式合并,git就会在merge时生成一个新的commit,这样就可以从分支历史里查看出分支信息了。

  9. 暂存临时现场

    $ git stash //把工作现场存储起来,使得工作区干净如初

    主要用于在自己工作到一半,没法提交,然后又有新的bug要修复,就用这个命令保存现场,然后切换到bug分支,修复。

  10. 恢复临时现场

    $ git stash list //查看临时工作区保存记录  stash@{0}: WIP on dev: 6224937 add merge//这是临时工作区记录列表$ git stash apply stash@{0}  //恢复刚刚的临时工作区$ git stash drop stash@{0}  //删除刚刚的临时保存记录

    上面的命令已经可以恢复并删除保存记录了,但是语句比较多,还有一种方法直接恢复到最近一次的临时现场:

    $ git stash pop //既恢复工作区又删掉了保存记录

七、多人协作(重点)

1. 说明

2. 讲解

  • 查看远程信息

    $ git remote    //查看远程库的信息  origin$ git remote -v            //查看更详细信息  origin  git@github.com:michaelliao/learngit.git (fetch)  origin  git@github.com:michaelliao/learngit.git (push)
  • 推送分支

    $ git push origin master //推送主分支$ git push origin mdev //推送mdev分支
  • 抓取分支 (模拟多人协作,假如你自己和一个A同学协作)

    A同学:$ git clone url.. //先从仓库克隆$ git branch  //查看分支,默认只有master分支,但是远程是有dev分支的$ git checkout -b dev origin/dev //所以要本地创建dev并与远程相连接$ git commit -m "add something by A" //A同学修改了东西并添加入版本库$ git push origin dev //上传到远程仓库
    我自己:$ git commit -m "add something by me" //此时我自己也修改了一些东西,//并与A同学该的相同地方$ git push origin dev //此时推送将推送失败,提示先git pull$ git pull //于是你也就git pull,提示失败,本地dev未与远程连接$ git branch --set-upstream dev origin/dev //再按照提示将本地分支与远程连接$ git pull //再次git pull,成功,但是出现冲突,解决冲突$ git commit -m "merge&add something" //提交冲突,至此就完成了多人协作
  • 分支链接(重要)

    $ git checkout -b dev origin/dev这个是新建本地分支为dev并与远程的dev相关联
    $ git branch --set-upstream dev origin/dev这个是我之前新建了分支,但是没有关联到远程分支,这里是将已有的分支关联到远程分支。

八、标签

  • 打标签两种方式

    $ git branch //查看分支  *dev  master$ git checkout master  //切换到要打标签的分支  Switched to branch 'master'$ git tag v1.0 //用git tag name来打标签,默认打在最新提交的commit上$ git tag //查看所有标签
    //还可以如下打标签,按照commit id来打标签,如下:$ git log --pretty=oneline --abbrev-commit//查看commit历史,找到要打标签的id号$ git tag v1.0 622493$ git tag //查看标签列表(按照标签名列出)$ git show v1.0 //查看v1.0标签的详细信息
  • 删除分支和推送分支

    $ git tag -d v0.9 //删除标签0.9,创建的分支默认都在本地,不会自动推送到远程。$ git push origin v1.0 //将标签1.0推送到远程$ git push origin --tags //一次性将全部未推送的标签推送到远程//要删除远程标签,有点麻烦的$ git tag -d v0.9 //先从本地删除标签$ git push origin :refs/tags/v0.9 //然后再从远程删除标签

九、图形化界面

  1. git自带图形化界面的

    • 在git bash里输入git gui就会显示图形化界面。
      gui
    • 在git bash里输入gitk 就会显示图形化的log界面
      guilog
  2. SourceTree 这个自己看吧

十、git教程链接

  1. 官网英文教程
  2. 官网中文教程
  3. 快速简易指南
  4. 图解多语言(含中文)教程 –极力推荐
  5. 实战教程 –比较长,但是很实用
1 0