git学习总结

2019-08-23  本文已影响0人  叫我王必过

前言:使用了这么久的git,一直懵懵懂懂,之前使用source tree进行无脑操作,如今不能依赖source tree,还是得踏踏实实学习一下git 命令行,以及git的工作原理。

声明:本文是根据网上大神教程的总结整合。
原文链接:
https://www.cnblogs.com/qdhxhz/p/9757390.html 大部分来源于本篇文档
http://www.softwhy.com/article-8499-1.html

一、git工作区域和工作流程

二、git工作状态

1、什么是版本控制?

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

2、git如何对比两个版本差异?

GIT不关心文件两个版本之间的具体差别,而是关心文件的整体是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用SHA-1算法计算文件的校验和。


此图描述git中文件的状态转换

三、什么是HEAD?

1、很多指令都用到了HEAD,那HEAD是什么呢?

HEAD是指向正在工作中的本地分支的指针,通常情况下它可以与当前分支等同。

(1) 由此图可以看出HEAD指向master分支,master分支指向sha-1值为93dd8e(缩写)的commit提交



(2) .git目录中有一个为HEAD的文件,它记录着HEAD的内容,查看其中内容代码如下:



(3) 可以看到HEAD指向master分支,下面再来看一下refs/heads/master中的内容:master分支也只是一个存放40位sha-1值的文件而已,正是当前分支所指向commit的sha-1值。
image.png
2、什么是sha-1 ?
  • sha-1是一种密码学的哈希算法,此算法的特点是,如果被加密的内容相同,得出的sha-1值也是相同,如果被加密的值不同,那么得到的sha-1也绝对不会相同,于是可以利用sha-1值唯一标识指定内容。
  • 多数时候,我们看到的sha-1值并不是40位。

四、用户名和邮箱地址的作用

初次安装git,需要配置用户名和邮箱,作用是什么呢?

五、.gitignore文件

作用:

*.log           #表示忽略项目中所有以.log结尾的文件
123?.log        #表示忽略项目中所有以123加任意字符的文件
/error.log      #表示忽略项目中根目录中的error.log 这个文件
src/main/test/* #表示忽略/src/main/test/目录下的所有文件
**/java/        #匹配所有java目录下的所有文件
!/error.log     #表示在之前的匹配规则下,被命中的文件,可以使用!对前面的规则进行否定

六、git指令

1、新建代码库
# 在当前目录新建一个Git代码库
 git init
# 新建一个目录,将其初始化为Git代码库
 git init [project-name]
# 下载一个项目和它的整个代码历史
 git clone [url]
2、查看文件状态
#查看指定文件状态
git status [filename]
#查看所有文件状态
git status
3、工作区<-->暂存区
# 添加指定文件到暂存区
git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
git add [dir]
# 添加当前目录的所有文件到暂存区
git add .
#当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用(⚠️)
git rm file_path
#当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 这个时候直接push那边这个文件就没有,如果push之前重新add那么还是会有。
git rm --cached file_path
#直接加文件名   从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会选择覆盖
#加了【分支名】 +文件名  则表示从分支名为所写的分支名中拉取文件 并覆盖工作区里的文件
git checkout

4、工作区<-->资源库(版本库)
#将暂存区-->资源库(版本库)
git commit -m '该次提交说明'
#如果出现:将不必要的文件commit 或者 上次提交觉得是错的  或者 不想改变暂存区内容,只是想调整提交的信息
#移除不必要的添加到暂存区的文件
git reset HEAD 文件名
#去掉上一次的提交(会直接变成add之前状态)   
git reset HEAD^ 
#去掉上一次的提交(变成add之后,commit之前状态) 
git reset --soft  HEAD^
5、远程操作
# 取回远程仓库的变化,并与本地分支合并
git pull
# 上传本地指定分支到远程仓库
git push
6、分支操作
# 显示当前的Git配置
git config --list
# 编辑Git配置文件
git config -e [--global]
#初次commit之前,需要配置用户邮箱及用户名,使用以下命令:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
#调出Git的帮助文档
git --help
#查看某个具体命令的帮助文档
git +命令 --help
#查看git的版本
git --version
git branch     # 列出所有本地分支
git branch -r  # 列出所有远程分支
# 新建一个分支,但依然停留在当前分支 这个时候本地已经有新分支了,但远程还没有,只有切换到新分支push后,远程就有了
git branch [branch-name]
git checkout -b [branch]     # 新建一个分支,并切换到该分支 
git branch -d [branch-name]  #删除分支 已合并的分支 *不能删除当前所在的分支
git branch -D dev            #强行删除分支  分支未合并
git push origin --delete [branch-name] # 删除远程分支
git merge [branch] #合并指定分支到当前分支
7、解决冲突
git diff HEAD  #比较当前工作区和上一次提交时文件的差异
git diff HEAD^ #比较上一次提交和上上次提交的文件差异
git diff 分支名 #查看当前分支跟指定的分支的差异
git diff 分支名1 分支名2  #查看两个指定分支(已提交的)的差异,分支2 跟分支1的差别
git diff --name-only --diff-filter=U #查看冲突文件 这个太有用啦

8、git版本回退
语法:git reset --hard 版本号 注意:回退只是在本地进行回退,远程仓库还是最新的,所以之后要先pull
git reset --hard HEAD^   #将 Git 回退到上一个版本 也就是上上次提交的时候,这样就可以撤销当次提交的信息
git reset --hard 4b2a0c8 #版本号(commit id)没必要写全,一般写前七位就够了,Git会自动去匹配。
9、其他常用命令
# 显示当前的Git配置
git config --list
# 编辑Git配置文件
git config -e [--global]
#初次commit之前,需要配置用户邮箱及用户名,使用以下命令:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
#调出Git的帮助文档
git --help
#查看某个具体命令的帮助文档
git +命令 --help
#查看git的版本
git --version
git log -数字    #表示查看最近几次的提交
git log -p -2    #显示最近两次提交的不同点
git log --author #查看具体某个作者的提交
git log --online #输出简要的信息

七、命令行细节

1、git commit --amend 应用场景?
2、删除和合并分支如何操作?

场景:当前有两个分支:dev(团队开发分支)和 jizhi(我自己的分支)

八、使用案例

完全引用大神案例 =>原文在这里

1、commit后,需要回到上一个版本,这个版本数据全部不要
2、你在master修改代码,却需要把修改后代码推送到dev远程分支上
上一篇 下一篇

猜你喜欢

热点阅读