简介: git
学习:适合新手,开始使用git
进行团队合作开发,需要掌握的基础git
命令,不做知识点的工具书。
[TOC]
本文初发于 “偕臧的小站“,同步转载于此。
简述:
本文可以做到掌握如下内容,掌握基础的git
命令即可(达到能够在团队*[或商业化公司中]*,和队友一起协同开发即可)。更高深的技巧请移步git
高深语法区。
git
学习:适合新手,开始使用git
进行团队合作开发,需要掌握的基础git
命令,不做知识点的工具书。
开发平台环境:
编程环境: win10 x64 专业版 1803
操作系统版本:17134.285
编程软件: visual studio 2015
, Qt Creator 4.8.2 (Enterprise)
, Qt 5.9.8
背景:
学习linux
之前,还是先学习一番git
,之前一点git
基础,之前只是使用 github for desktop 的可视化工具来进行,git的使用,期间同时使用一下 git bash ,但是一直没有系统的学习的git,可能是柑橘初次接触git
那会,感觉晦涩难懂吧,毕竟有着名言:
大佬们创照带界面UI,就是方便提升效率,那还为什么不使用呢?
为了学习(zhuangbi
)一下linux
,和应该多接触版本控控制工具,且网上推崇的git
工具,老实说,我是真的心之向往,(github
限制文件100M
很难受)。
写此之前注意:
不要为了写博文而只成为了网络知识点的搬运工,感动了自己,却忘记了根本是掌握
学习命令之前的预备:
git config:
- 配置
git
环境,告诉电脑,你是谁(哪一个git账号)?
git config --global user.email "touwoyimuli@gmail.com"
git config --global user.name "touwoyimuli"
一:区别
参数–global含义:git config、git config –global、git config –system之前有何区别?
1.执行git config
,会打开该项目所属的配置文件(作用域最小,值针对当前项目有效)。
2.执行git config --global
,会打开C:\Users\yuanyi\.gitconfig
下的配置文件(作用域中等,为登陆这台计算机的用户)。
3.执行git config --system
,会打开D:\Program Files\Git\etc\gitconfig
(作用域最大,整台计算机,不管登陆那个帐号,不管哪个项目)。
二:优先级
有没有想过,如果三种配置里面都设置了某个参数,那么最后生效的是哪种呢?它们之前的优先级为(由高到低):git config
> git config --global
> git config --system
。
也就是作用域范围越广的优先级越低,相信这个不难理解。
git init:
- 初始化(该项目),将该项目(可看成文件夹)设置为带有
g
it管理的仓库
git status:
- 判断该工程的文件的状态

需要了解的git的几个区域的工作:
【Untracked】: 没有加入Git管理的文件;
【Unmodified】:已经提交文件(即已经存在于Git仓库中文件);
【Modified】: 已经存在于Git仓库的文件,后面做了修改但是没有提交;
【Staged】: 存在于Git暂存区,待提交的文件

git add:
- 将文件夹项目,提交到暂存区(
staged
)
高级用法:
git add -p //分块add
git add -u //只提交修改的文件,未追踪的不管
执行之后,会有如下:

我的linux里面没有没有s 参数
自定义手动划分区域,不知道为什么?
[y,n,q,a,d,/,K,j,J,g,e,?]
y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk nor any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk nor any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
上面的翻译如下:
y - 存储这个hunk
n - 不存储这个hunk
q - 离开,不存储这个hunk和其他hunk
a - 存储这个hunk和这个文件后面的hunk
d - 不存储这个hunk和这个文件后面的hunk
g - 选择一个hunk
/ - 通过正则查找hunk
j - 不确定是否存储这个hunk,看下一个不确定的hunk
J - 不确定是否存储这个hunk,看下一个hunk
k - 不确定是否存储这个hunk,看上一个不确定的hunk
K -不确定是否存储这个hunk,看上一个hunk
s - 把当前的hunk分成更小的hunks
e - 手动编辑当前的hunk
? - 输出帮助信息
git log:
- 查看时间线:所有的
commit
提交

git commit:
- 提交项目
git commit "项目简介一句话" //不推荐
git commit //会自动跳到一个单独的文件,写完整的提交信息 //实际工作中
git rm:
git rm --cached //重暂存区移除,文件还在
git rm -f //直接删除文件,并且重git仓库移除
git diff:
git diff master //查看当前分支做了哪些改动
git diff --cached //查看已经staged(不记得回看上面的那个区图)文件改动
git show:
- 显示某一个项目的具体信息
git show
git branch:
- 一般用于分支的操作,比如创建分支,查看分支等等
git branch //列出本地已经存在的分支,并且在当前分支的前面用"*"标记
git branch -r //查看远程版本库分支列表
git branch -a //查看所有分支列表,包括本地和远程
git branch dev //创建名为dev的分支,创建分支时需要是最新的环境,创建分支但依然停留在当前分支
git checkout:
- 操作分支
git checkout master //将分支切换到master
git checkout -b master //如果分支存在则只切换分支,若不存在则创建并切换到master分支,repo start是对git checkout -b这个命令的封装,将所有仓库的分支都切换到master,master是分支名,
git rebase:
git merge:
git在工作中的正确使用方式—git merge篇 - nrsc - CSDN博客
冲突解决:
- 手动解决
- git mergtool
//+++++++++++++++++++++++++++分割,建议歇一会,再开始看下面的++++++++++++++++++++++++
git stash:
- 备份当前仓库状态
git reset:
git reset //仓库文件不变,git提交信息被更改
git reset --hard //仓库文件强制回滚到commit
git revert:
- git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,如下图所示,假设我们要回退到版本一:

Git恢复之前版本的两种方法reset、revert(图文详解)
git bisect:
- 用来查找哪一次代码提交引入了错误。
- 二分查找,排错
git tag:
- tag是git版本库的一个标记,指向某个commit的指针。
Git中tag标签的使用 - 等待化茧成蝶的专栏 - CSDN博客
git clean:
- 删库到跑路,被老板抓住,打断腿,是一个工作几个月可赚60W的命令
git clean -fd
git cherry-pick:
- 看做“局部合并”
- 可以理解为”挑拣”提交,它会获取某一个分支的单笔提交,并作为一个新的提交引入到你当前分支上。 当我们需要在本地合入其他分支的提交时,如果我们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上
git submodule:
- 当一个项目需要包含其他支持项目源码时使用的功能,作用是两个项目是独立的,且主项目可以使用另一个支持项目。
git reflog:
可以查看所有分支的所有操作记录(包括已经被删除的
commit
记录和reset
的操作)例如执行
git reset --hard HEAD~1
,退回到上一个版本,用git log
则是看不出来被删除的commitid
,用git reflog
则可以看到被删除的commitid
,我们就可以买后悔药,恢复到被删除的那个版本。
git ignore:
- 来忽略某些文件的提交
规则 作用
/mtk 过滤整个文件夹
*.zip 过滤所有.zip文件
/mtk/do.c 过滤某个具体文件
!/mtk/one.txt 追踪(不过滤)某个具体文件
注意:如果你创建.gitignore文件之前就push了某一文件,那么即使你在.gitignore文件中写入过滤该文件的规则,该规则也不会起作用,git仍然会对该文件进行版本管理。
配置语法
以斜杠“/”开头表示目录;
以星号“*”通配多个字符;
以问号“?”通配单个字符
以方括号“[]”包含单个字符的匹配列表;
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录。
注意: git 对于 .gitignore配置文件是按行从上到下进行规则匹配的
参考博文:
因为有着热心网友的无私分享,故不辞辛苦也将自己的项目或经验整理成博客的形式,也提供给一起大家学习探讨与交流
git 官方book 英文 (推荐)
git book 中文 (推荐)
Git详解及 github与gitlab使用 (推荐,系列)
直接git config和带–global、–system的区别
Git合并单个文件和[y,n,q,a,d,/,K,j,J,g,e,?]
Git branch && Git checkout常见用法

本文初发于 “偕臧的小站“,同步转载于此。