zoukankan      html  css  js  c++  java
  • Git笔记

    1、安装git

    https://www.liaoxuefeng.com/wiki/896043488029600/896067074338496

    • 设置名字和email地址
      • $ git config --global user.name "Your Name"
      • $ git config --global user.email "email@example.com"
    • 查看设备名字和email地址
      • $ git config --global user.name
      • $ git config --global user.email

    2、版本库

    2.1 创建版本库

    1. 选择合适的地方创建空目录 mkdir

    2. 在路径下,直接通过git init命令把这个目录变成Git可以管理的仓库

    pwd可以显示当前目录

    此时目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

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

    windows显示隐藏目录方法:查看->选项->查看->下拉找到显示隐藏文件->应用

    也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的。

    2.2 把文件添加到版本库

    1. 使用git add命令将文件添加到仓库中
    git add filename
    
    1. git commit命令将文件提交到仓库
    git commit -m "wrote a readme file"
    // -m 后的内容为本次提交的说明,方便后续从历史记录中找到改动记录
    

    可以add多个文件后,用一次提交

    注意

    • git只能跟踪文* 本文件的改动,比如TXT文件,网页,所有的程序代码等。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

    • 不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题

    • Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动

    • 文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。

    报错说明

    1. 输入git add readme.txt,得到错误:fatal: not a git repository (or any of the parent directories)

      • git命令没有在仓库目录内执行
    2. 输入git add readme.txt,得到错误fatal: pathspec 'readme.txt' did not match any files

      • 添加某个文件时,该文件必须在当前目录下存在

    3、时光穿梭机

    3.1 修改文件并提交

    修改文件

    1. 直接在文件中修改

    2. 使用vi filename进行修改

      • 进入文件后a或者i命令进入编辑模式
      • 按esc键退出编辑模式,输入:wq保存并退出。
    3. 其他 https://www.cnblogs.com/bingle/p/9785621.html

    提交

    1. git status命令可以让我们时刻掌握仓库当前的状态,查看是否有修改过未提交的文件

    2. git diff filename可以查看具体修改了什么内容

    3. 确定了修改后的文件内容,后续提交和2.2一致,过程中可以随时使用git status查看仓库状态,看是否有文件有修改、待提交...

    3.2 版本回退

    1. git log命令可以查看之前的操作历史记录
    // 如果嫌弃直接显示太乱,可以加上--pretty=oneline
    git log --pretty=oneline
    
    1. 使用git reset命令可以实现版本回退
    git reset --hard HEAD^
    // 如果想查看当前的文件内容,用 cat filename 命令
    

    在Git中,用HEAD表示当前版本,上一个版本就是HEAD^, 上上一个版本就是HEAD^^, 当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

    注意:这个命令会导致回退后的版本之后的编辑内容都丢失,例如A-B-C,回到B后,C会丢失,如果想恢复成C的版本需要找到C的版本号(commit id)

    git reset --hard ID
    

    ID只输入版本号的一部分就可以自。有以下两种方法找到C的版本号:

    1、如果没有关闭当前git窗口,可以直接去前边的git log命令下看

    2、关闭了窗口的话,再打开之前的内容会清屏,此时使用git reflog命令也可以找到之前的操作记录,进而找到C的版本号

    3.3 工作区和暂存区

    工作区

    工作区就是在电脑里能看到的目录,也就是当前git管理的仓库里的内容

    版本库--暂存区

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

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

    2.2中讲了,将文件添加到版本库分成git addgit commit两个步骤:

    1. git add把文件添加进去,实际上就是把文件修改添加到暂存区;

    2. git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

    简单理解就是需要提交的文件修改通过git add全部放到暂存区,然后,通过git commit一次性提交暂存区的所有修改。

    注意:在Git中,实际跟踪并管理的是修改,而非文件。

    第一次修改 -> git add -> 第二次修改 -> git commit--此时第二次修改不会被提交

    使用git diff HEAD -- filename命令可以查看此时工作区和版本库里面最新版本的区别。工作区保存的是第二次修改后的文件,而版本库里存放的是第一次修改后的结果。

    3.4 撤销修改

    git checkout -- file本质是用版本库中的版本替换工作区的版本
    这个命令可以丢弃工作区的修改,针对以下两种情况:

    1. 文件自修改后还没有被放到暂存区,也就是说没有经过git add命令操作文件,现在,撤销修改就回到和版本库一模一样的状态;

    2. 文件已经添加到暂存区git add后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

    在实际操作中还存在两种情况:

    1. 修改错误的文件添加到暂存区git add了,还没有提交git commit,想撤回
      1. 使用git reset HEAD filename命令可以把暂存区的修改撤掉,回到工作区
      2. 使用git cheakout -- filename命令撤销工作区的修改
    2. 修改错误的文件已经提交了,想撤回,此时就是版本回退直接解决git reset --hard HEAD^

    3.5 删除文件

    通常在文件区删除的话使用rm filename命令,或者在文件夹中直接删除就可以,但是此时版本库中并没有删除文件,此时有两种情况:

    1. 文件是误删除的,此时使用git checkout --filename命令可以恢复,这个命令本质是用版本库中的版本替换工作区,因此只要没有commit都可以直接恢复,既可以恢复修改,也可以恢复删除。当然,如果commit了,可以使用git reset命令恢复到任意版本。

    2. 文件是确实要删除的,有以下几种方式:

      • rm filename -> git add filename -> git commit -m""
      • rm filename -> git rm filename -> git commit -m""
      • git rm filename -> git commit -m""
  • 相关阅读:
     Go is more about software engineering than programming language research.
    perl 处理json 数组格式
    perl 处理json 数组格式
    mongodb 限制ip访问
    mongodb 限制ip访问
    haproxy 访问www.zjdev.com 自动跳转到appserver_8001 对应的nginx
    haproxy 访问www.zjdev.com 自动跳转到appserver_8001 对应的nginx
    docker 数据盘映射方案
    docker 数据盘映射方案
    perl encode_utf8 和decode_utf8
  • 原文地址:https://www.cnblogs.com/zhangtao-0001/p/15239659.html
Copyright © 2011-2022 走看看