【Git 笔记】Git 入门教程

    Git 官网https://git-scm.com/

    下载传送门https://git-scm.com/downloads

    官网Book(中文版)https://git-scm.com/book/zh/v2

    Git是最流行的分布式版本控制系统,Git是Linus用C语言开发的,所以速度是非常快的也很稳定。

    所有的版本控制系统,其实只能跟踪文本文件的改动,比如 TXT 文件,网页,所有的程序代码等等,Git 也不例外。

    Git 项目一般包括Git 仓库、工作目录以及暂存区域:

  • Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
  • 工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
  • 暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作"索引",不过一般说法还是叫暂存区域。

    基本的 Git 工作流程如下:

  1.     在工作目录中修改文件。
  2.     暂存文件,将文件的快照放入暂存区域。
  3.     提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录

 

一、创建版本库 

    1、新建一个空文件夹,作为版本库的仓库

$ mkdir Git_Learn
$ cd Git_Learn

    2、为了更好的使用git,git 中添加全局的用户名username和邮箱email

$ git config --global user.name "holysll"

$ git config --global user.email "holysll@example.com"

    3、通过git init 命令把这个目录变成 Git 可以管理的仓库,用ls 或者 ll命令可以看到隐藏的.git文件

$ git init
$ ls

    4、在目录下新建一个文件test.py ,并用git add test.py 命令添加到仓库 或者使用 git add .  添加目录下的所有文件到仓库其中后面点之前有空格。

$ touch test.py
$ git add .
$ git add test.py

    5、通过git commit -m "xxxx" 提交到仓库,其中 -m 后面输入的是本次提交的说明 

$ git commit -m "test.py"

    6、通过git status  查看仓库状态

$ git status

    7、通过git diff test.py 查看看尚未暂存的文件的修改内容

$ git diff test.py
$ git diff --cached  # 查看已暂存的将要添加到下次提交里的内容
$ git diff HEAD --file # 查看工作区和版本库里面最新版本的区别

 8、通过 git log 查看提交历史记录

# 查看提交历史记录
$ git log 

# 显示最近两次提交内容差异,-p显示每次提交的内容差异,-2 显示最近两次提交
$ git log -p -2 

# 每次提交的简略的统计信息
$ git log --stat

# 只显示 --stat 中最后的行数修改添加移除统计
$ git log --shortstat

# 仅在提交信息后显示已修改的文件清单
$ git log --name-only

# 显示新增、修改、删除的文件清单
$ git log --name-status

# 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符
$ git log --abbrev-commit

# 使用较短的相对时间显示(比如,“2 weeks ago”)
$ git log --relative-date

# 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)
$ git log --pretty

# 将每个记录提交放在一行显示
$ git log --pretty=oneline 

# 用format 固定格式显示提交记录
$ git log --pretty=format:"%h - %an, %ar : %s"

# 用ASCII 图形更形象地展示你的分支、合并历史
$ git log --pretty=format:"%h %s" --graph

# 列出所有最近两周内的提交
$ git log --since=2.weeks

# 仅显示指定时间之后的提交
$ git log --after
$ git log --since

# 仅显示指定时间之前的提交
$ git log --before
$ git log --until

# 仅显示指定提交者相关的提交
$ git log --committer

# 仅显示添加或移除了某个关键字的提交
$ git log -S

# 找出添加或移除了某一个特定函数的引用的提交
$ git log -Sfunction_name

# 用 --author 选项显示指定作者的提交
$ git log --author

# 用 --grep 选项搜索提交说明中的关键字
$ git log --grep

        git log --pretty=format 常用的选项 :

选项说明

%H

提交对象(commit)的完整哈希字串

%h

提交对象的简短哈希字串

%T

树对象(tree)的完整哈希字串

%t

树对象的简短哈希字串

%P

父对象(parent)的完整哈希字串

%p

父对象的简短哈希字串

%an

作者(author)的名字

%ae

作者的电子邮件地址

%ad

作者修订日期(可以用 --date= 选项定制格式)

%ar

作者修订日期,按多久以前的方式显示

%cn

提交者(committer)的名字

%ce

提交者的电子邮件地址

%cd

提交日期

%cr

提交日期,按多久以前的方式显示

%s

提交说明

    查看 Git 仓库中,2008 年 10 月期间,Junio Hamano 提交的但未合并的测试文件,可以用下面的查询命令:

$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" --before="2008-11-01" --no-merges -- t

    9、通过 git reflog 查找命令历史记录(重返未来)

$ git reflog

    10、确实要从版本库中删除该文件,那就用命令git rm 删掉,并且git commit 

$ git rm test.py
$ git commit -m "remove test.py"

# 删除 log/ 目录下扩展名为 .log 的所有文件
$ git rm log/\*.log 

# 删除以 ~ 结尾的所有文件   
$ git rm \*~   

    11、文件重命名

$ git mv test test1

 

 

二、版本回退 

    有的时候存在误删,误操作等情况或者是遗漏一些代码、文件之类的,或者提交信息错误。这时,我们想回退到以前版本,或者撤销操作。

    1、撤销操作

    有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令尝试将暂存区中的文件重新提交,如果自上次提交以来你还未做任何修改,那么快照会保持不变,而你所修改的只是提交信息:

$ git commit --amend

    2、取消暂存的文件

# 版本回退(HEAD指向的版本就是当前版本)
$ git rest --hard HEAD^      会退到上一个版本
$ git rest --hard HEAD^^     会退到前两个版本
$ git rest --hard HEAD~100   会退到前100个版本
$ git reset --hard <commit id>  根据commit id回退到某个版本

   当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改 :

$ git reset HEAD file
$ git checkout -- file  # 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时

    虽然在调用时加上 --hard 选项令 git reset 成为一个危险的命令(译注:可能导致工作目录中所有当前进度丢失!),但本例中工作目录内的文件并不会被修改。 不加选项地调用 git reset 并不危险 — 它只会修改暂存区域。 

    3、撤消对文件的修改(文件在工作区的修改全部撤销

  • 一种是 file 自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 一种是 file 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

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

$ git checkout -- file

     你需要知道 git checkout -- [file] 是一个危险的命令,这很重要。 你对那个文件做的任何修改都会消失 - 你只是拷贝了另一个文件来覆盖它。 除非你确实清楚不想要那个文件了,否则不要使用这个命令。

 

三、分支管理

    1、分支创建

# 创建 dev 分支,然后切换到 dev 分支,-b参数表示创建并切换
$ git checkout -b dev

# 等同于
$ git branch dev
$ git checkout dev

    2、查看当前分支 

$ git branch

   3、切换分支

$ git checkout master

    4、合并分支

# 把 dev 分支的工作成果合并到 master 分支上
$ git checkout master
$ git merge dev

# --no-ff参数,表示禁用 Fast forward ,保留 merge 信息
$ git merge --no-ff -m "keep merge info" dev

     5、删除分支

$ git branch -d dev

# 强行删除
$ git branch -D dev

    6、解决冲突

# 手动进行把dev和master冲突的内容进行合并,然后commit 例如:
<<<<<<< HEAD
aaaaaa
=======
bbbbbb
>>>>>>> dev


# 手动修改合并后
aaaaaa & bbbbbb

# 提交
$ git commit -am "conflict fixed"


# 查看到分支合并图
$ git log --graph

    7、当前工作现场“储藏”

    当工作只进行到一半,还没法提交,预计还需要一段时间,但是又要忙着去做其他事情,所以可以把当前工作区的内容存储起来。

# 储存当前工作区
$ git stash

# 查看刚才储存的位置
$ git stash list

# 恢复之前工作区内容, 并删除stash 内容
$ git stash apply
$ git stash drop

# 直接恢复同时删除stash内容
$ git stash pop

# 恢复指定的 stash
$ git stash apply stash@{0}

 

四、远程仓库 

    1、克隆远程仓库

# 用git clone克隆github上用户名为username 仓库名为gitname的远程仓库
$ git clone https://github.com/username/gitname

    2、查看远程仓库

$ git remote
$ git remote show [remote-name] # 查看某一个远程仓库的更多信息

# 选项 -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL

$ git remote -v
origin	https://github.com/username/gitname (fetch)
origin	https://github.com/username/gitname (push)

     3、添加远程仓库

# 通过 git remote add <shortname> <url> 添加一个新的远程 Git 仓库
$ git remote
$ git remote add alg https://github.com/abc/learn_git
$ git remote -v
origin	https://github.com/username/gitname (fetch)
origin	https://github.com/username/gitname (push)
alg	https://github.com/abc/learn_git (fetch)
alg	https://github.com/abc/learn_git (push)

    4、从远程仓库中抓取与拉取

# git fetch 相当于是从远程获取最新到本地,不会自动merge
$ git fetch [remote-name]

# git pull:相当于是从远程获取最新版本并merge到本地
$ git pull [remote-name]

    在实际使用中,git fetch更安全一些 

     5、推送到远程仓库

# -u参数,Git 不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令

$ git push -u origin master

     6、远程仓库的移除与重命名

# 使用 git remote rename 去修改一个远程仓库的简写名
$ git remote rename alg aaa   # 把远程仓库alg重命名为aaa

# 删除远程仓库aaa
$ git remote rm aaa

 

    参考来源:https://git-scm.com/book/zh/v2

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

                      https://morvanzhou.github.io/tutorials/others/git/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值