• Git 基本操作


    1. 写在前面

    • 本文章是对《Pro Git(Second Edition)》的简单总结。因此,只是记录我认为重要的内容,用来当作目录,方便自己忘记时,快速找到。如果你对我所记录的内容不是很明白,请阅读书籍中的具体内容。

    2. Git 简介

    • 实际上,Git 是一种分布式版本控制技术(Version Control);
    • 版本控制分为本地版本控制,集中式版本控制以及分布式版本控制;
    • Git 中保存的是在某一时刻,全部文件的"快照(snapshot)"

    2.1 Git 的安装及配置

    • Git 的安装
    • Git 配置文件说明:
      • /etc/gitconfig: 系统级配置文件;对应的参数 --system
      • ~/.gitconfig(或~/.config/git/config): 用户级配置文件;对应的参数 --global
      • config: 也就是 Git 仓库中的配置文件(.git/config);对应的参数 --local
    • git config --list:查看当前git配置;
    • git config --global user.name "noodlescnliu": 设置用户名
    • 常见配置:
    user.name=noodlescnliu
    user.email=noodlescnliu@gmail.com
    alias.lg=log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit    # 用于日志格式化输出的别名
    

    3. Git 操作文件

    3.1 Git 操作文件的三个区域

    • Git 仓库(.git 位置): 用来存储文件"快照";
    • 工作区(Working Directory): 对文件执行增删改操作;
    • 待提交区(Staging Area): 文件修改完成,首先提交到该区,然后提交到Git仓库;

    3.2 Git 文件中的状态

    3.3 常用命令解释(以my_project/a.txt为例)

    • git init:初始化本地Git仓库,创建.git隐藏文件夹;
    • 新建文件a.txt,并没有纳入到Git仓库的管理,属于Untracked状态;
    • git add a.txt:将a.txt的状态变为Staged,进入到"待提交区域(Staging Area)";
    • git commit -m 'my first commit': 将a.txt的状态变为Unmodified,进入Git仓库"快照";
    • git status: 检查当前目录下,各个文件正在处于哪种状态;
    • 当你发现a.txt中存在错误,或者需要添加新内容,修改之后的a.txt,与存储在Git仓库中的"快照"内容发生了变化,因此,状态变为Modified,需要重新git add a.txt,git commit -m 'add new message to a.txt';
    • git commit -am a.txt 'skipping the staging area': 是 git add a.txtgit commit -m 'skipping the staging area' 两个命令的简写。但是,文件被Git仓库管理之后,才能执行成功;

    3.4 .gitignore文件

    • 有一些文件是没有必要被Git仓库管理的,例如,日志输出文件(.log),Java编译后生成的.class文件等;
    # 示例:
    # Log file
    *.log
    
    # Package Files #
    *.jar
    *.war
    *.ear
    *.zip
    *.tar.gz
    *.rar
    

    3.5 日志输出格式

    • git log -p -2: 输出最近提交的两条日志;
    • git log --pretty=format:"%h - %an, %ar : %s"
      • %h: Abbreviated commit hash;
      • %an: 作者姓名;
      • %ar: 提交相对日期;
      • %s: commit 时,输入的提交信息;
    • git log --pretty=format:"%h %s" --graph
    • git log --abbrev-commit --pretty=oneline: 只显示哈希值的前几位,以及提交的说明;

    3.6 远程协作

    • git clone https://github.com/Noodlescn/guava: 从 GitHub 中下载项目;
    • git remote: 查看已配置远程服务器的名称,默认下载的项目的远程服务器名称为origin;
    • git remote -v: 当提交或获取项目时,origin所代表的URL地址;
    • git remote add <shortname> <url>: 新增自定义远程服务器地址;
    • git remote rename <oldname> <newname>: 重命名远程服务器;
    • git remote remove <shortname>: 移除远程服务器;
    • 当从远程Clone项目后,张三又向远程中提交了一些内容。这时,需要使用 git fetch <remote> 来更新自己本地项目内容;而由于在自己Clone项目时,Git默认将远程服务器设置为"origin",因此,可以简写为git fetch origin;然后,需要手动进行合并操作git merge;
    • git pull: 将 git fetch 操作和 git merge操作合为一步进行;
    • git push <remote> <branch>: 将项目分享出去, git push origin master;
    • git remote show "https://github.com/google/guava": 用于查看远程项目的信息;

    3.6.1 打标签(Tagging)

    • 标签主要用来标记产品版本号;
    • git tag: 列出所有的标签;
    • git tag -l "v1.8.*": 列出以"v1.8"开头的标签;
    • git tag -a v1.4 -m "my version 1.4": 创建 Annotated Tags;

    4. Git 分支(Branching)

    • 示例:向Git仓库中提交三个文件:
      • git add README test.rb LICENSE
      • git commit -m 'The initial commit for my project'
    • 提交之后,Git仓库中多了五个实体:
      • 三个Blob: 分别代表三个提交的文件内容;
      • 一个树: 指向三个Blob;
      • 一个指针: 指向树;


    • git branch testing: 新建testing分支;
    • git branch -d hotfix: 删除hotfix分支;
    • git branch: 查看当前所有分支;
    • git branch -v: 查看每个分支最后提交的信息;
    • git branch --merged: 查看已合并的分支;
    • git branch --no-merged: 查看未合并的分支;


    - `git checkout testing`: 切换分支;


    - `git merge iss53`: 合并分支;

    4.1 Git 分支远程协作


    **参考资料:** - [Git Pro](https://git-scm.com/book/en/v2)
  • 相关阅读:
    Linux Hung Task分析
    Linux内存都去哪了:(1)分析memblock在启动过程中对内存的影响
    《Linux/UNIX系统编程手册》第63章 IO多路复用、信号驱动IO以及epoll
    Linux内核和用户空间通信之netlink
    Linux soft lockup分析
    一款DMA性能优化记录:异步传输和指定实时信号做async IO
    Linux下时钟框架实践---一款芯片的时钟树配置
    使用Kernel NetEm和tc模拟复杂网络环境
    使用Flame Graph进行系统性能分析
    sigsuspend()阻塞:异步信号SIGIO为什么会被截胡?
  • 原文地址:https://www.cnblogs.com/linkworld/p/9426306.html
Copyright © 2020-2023  润新知