zoukankan      html  css  js  c++  java
  • Git的简单使用

    一、git安装以及初始化配置

    1、在使用git之前,需要进入官网创建一个账号,以便后面的学习。

    2、安装好git,点击桌面图标git bash,进入到Git的命令行工具,使用命令

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

    3、git类似一个小型的linux操作系统,所有有些命令在git上也是支持的。列如(mkdir,cat,pwd,vi等待)

    4、git区域划分神图

    二、创建版本库

    1、创建目录learngit

    1 $ mkdir learngit
    2 $ cd learngit
    3 $ pwd
    4 /learngit

    注意:根目录为Git的安装目录

    2、将learngit目录变为git可管理的仓库

    1 $ git init
    2 Initialized empty Git repository in D:/Git/learngit/.git/

    瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

    如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

    3把文件添加到版本库

    注意:使用window系统的童鞋们,尽量不要使用系统附带的记事本开发,可能会出现编码格式的问题,可以采用Eitplus等软件(将编码格式改为UTF-8)

    编写一个readme.txt文件,内容如下:

    Git is a version control system.
    Git is free software.

    1、将文件添加到暂存区

    1 $ git add readme.txt

    2、将文件添加到本地库

    1 $ git commit -m "wrote a readme file"
    2 [master (root-commit) e3f4b5b] wrote a readme file
    3  1 file changed, 2 insertions(+)
    4  create mode 100644 readme.txt

    简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

    嫌麻烦不想输入-m "xxx"行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。

    git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。

    注意:

      利用vi、及vim进行操作后,使用git add readme.txt进行提交时可能会出现错误!

    warning: LF will be replaced by CRLF in readme.txt.
    The file will have its original line endings in your working directory

    解决方案:

    1 $ git config --global core.autocrlf false

    三、时光机穿梭

    这部分的内容参考廖雪峰的官方网站

    里面的内容非常详细,希望读者仔细观看!在这里我只是针对性的说明。

    1、版本回退

    1. git staus   查看仓库的当前状态
    2. git diff   查看文件修改的内容
    3. git log   显示从最近到最远的提交日志
    4. git log --pretty=oneline 精简内容
    5. git reset --hard HEAD^   回退到上一个版本
    6. git reset --hard HEAD^^   回退到上上一个版本
    7. git reset --hard HEAD~2  回退到上上一个版本
    8. git reset --hard commit id(一般值输入前7位数据就行)
    9. git reflog   用来记录你的每一次命令

    2、工作区和暂存区

    工作区(Working Directory)

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

    版本库(Repository)

    工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

    Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

    3、管理修改

    注意:Git管理的是修改,而不是文件!

    列如:

    第一次修改 -> git add -> 第二次修改 -> git commit

    你看,我们前面讲了,Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

    提交后,用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别

    4、撤销修改

    注意:(执行这些操作必须要)

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

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

    一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

    git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区

    git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本

    场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

    场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

    场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

    5、删除文件

    一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:

    现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

    四、远程仓库

    1、添加远程仓库

    要关联一个远程库,使用命令git remote add origin git@github.com:lilong1314520/learngit.git(把lilong1314520换成自己的账号)

    关联后,使用命令git push -u origin master第一次推送master分支的所有内容

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

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

    2、克隆远程仓库

    git clone git@github.com:lilong1314520/learngit.git

    五、分支管理

    1、创建于合并分支

    1 $ git branch dev  创建dev分支
    1 $ git checkout dev  切换到dev分支
    1 $ git checkout -b dev  创建分支并切换到dev
    1 $ git branch  查看所有分支,当前分支前面会标一个*
    1 $ git merge dev  合并指定分支到当前分支
    1 $ git branch -d dev  删除dev分支
    1 $ git checkout master  切换到主分支

    2、解决冲突

    1 $ git log --graph --pretty=oneline --abbrev-commit  查看分支的合并情况

    解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交

    3、分支策略管理

    通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息

    如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

    准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward

    1 $ git merge --no-ff -m "merge with no-ff" dev

    相比较而言,使用Fast forword模式:

    所有实际当中的模式:

    4、Bug分支

    Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:

    1 $ git stash

    查看保存的进度

    1 $ git stash list

    恢复进度

    一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

    另一种方式是用git stash pop,恢复的同时把stash内容也删了:

    5、Feature分支

    1 $ git branch -D feature-vulcan  如果要强行删除,需要使用大写的-D参数

    6、多人协作

    1 $ git remote  查看远程库的信息
    1 $ git remote -v  显示更详细的信息

    如果使用git remote没有任何反应,则是因为没有与远程仓库进行关联!关联后即可看见信息。

    1 $ git push origin master  推送主分支
    1 $ git push origin dev  推送支分支
    • master分支是主分支,因此要时刻与远程同步;

    • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

    • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

    • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

    抓取分支:

    1 $ git checkout -b dev origin/dev  创建远程origindev分支到本地
    1 $ git pull  最新的提交从origin/dev抓下来
    1 $ git branch --set-upstream-to=origin/dev dev  设置devorigin/dev的链接

    因此,多人协作的工作模式通常是这样:

    1. 首先,可以试图用git push origin <branch-name>推送自己的修改;

    2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

    3. 如果合并有冲突,则解决冲突,并在本地提交;

    4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

    如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

    这就是多人协作的工作模式,一旦熟悉了,就非常简单。

    7、Rebase

    1 $ git rebase  提交历史“整理”成一条直线
    • rebase操作可以把本地未push的分叉提交历史整理成直线;

    • rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

    六、标签管理

    1、创建标签

    1 $ git tag v1.0  默认标签是打在最新提交的commit上的
    1 $ git tag  查看所有标签
    1 $ git tag v0.9 f52c633  历史提交
    1 $ git show v0.9  查看tag信息
    1 $ git tag -a v0.1 -m "version 0.1 released" 1094adb  创建带有说明的标签,用-a指定标签名,-m指定说明文字

    2、操作标签

    1 $ git tag -d v0.1  删除tag
    1 $ git push origin v1.0  推送tag
    1 $ git push origin --tags  一次性推送tag
    1 $ git tag -d v0.9    删除远程tag
    2 $ git push origin :refs/tags/v0.9

    七、自定义Git

    1、忽略特殊文件

    在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

    不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore

    忽略文件的原则是:

    1. 忽略操作系统自动生成的文件,比如缩略图等;
    2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
    3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

    .gitignore文件大致内容:

    # Windows:
    Thumbs.db
    ehthumbs.db
    Desktop.ini
    
    # Python:
    *.py[cod]
    *.so
    *.egg
    *.egg-info
    dist
    build
    
    # My configurations:
    db.ini
    deploy_key_rsa

    最后一步就是把.gitignore也提交到Git,就完成了!当然检验.gitignore的标准是git status命令是不是说working directory clean

    使用Windows的童鞋注意了,如果你在资源管理器里新建一个.gitignore文件,它会非常弱智地提示你必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了。

    1 $ git add -f App.class  可以用-f强制添加到Git
    1 $ git check-ignore  检查规则

    2、配置别名

    1 $ git config --global alias.st status  st就表示status
    1 $ git config --global alias.unstage 'reset HEAD'  既然是一个unstage操作,就可以配置一个unstage别名

    配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。

    配置文件放哪了?每个仓库的Git配置文件都放在.git/config文件中

    本文摘选自:Git教程-廖雪峰的官方网站

  • 相关阅读:
    Data Mining | 二分类模型评估-ROC/AUC/K-S/GINI
    Data Mining | 二分类模型评估-混淆矩阵
    Data Mining | 数据挖掘技术基础与进阶
    Data Mining | 数据挖掘概要和方法论
    python | 模块与第三方库的安装
    SAS | 数据EDA及代码
    SAS | 数据读入思路及代码
    python | 自定义函数
    SAS | 使用SAS数据
    SAS | 逻辑库和SAS数据集
  • 原文地址:https://www.cnblogs.com/lilong74/p/11309618.html
Copyright © 2011-2022 走看看