目录
1、初始化一个Git仓库
git init
2、添加文件到Git仓库,分两步:
(1)使用命令git add <file>
,注意,可反复多次使用,添加多个文件;
(2)使用命令git commit -m <message>
,完成。
3、查看仓库的当前状态:
git status
4、查看差异
顾名思义就是查看difference,显示的格式正是Unix通用的diff格式
git diff
5、查看日志
显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数
git log
6、回退版本
Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交的版本号,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
git reset --hard HEAD^
7、记录命令
Git提供了一个命令git reflog
用来记录你的每一次命令:
git reflog
8、git diff 文件对比
(1) git diff filepath 工作区与暂存区比较
(2) git diff HEAD filepath 工作区与HEAD ( 当前工作分支) 比较
(3)git diff --staged 或 --cached filepath 暂存区与HEAD比较
(4) git diff branchName filepath 当前分支的文件与branchName 分支的文件进行比较
(5) git diff commitId filepath 与某一次提交进行比较
9、还原修改
e
可以丢弃工作区的修改,其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
git checkout -- fil
10、撤销unstage
可以把暂存区的修改撤销掉(unstage),重新放回工作区
git reset HEAD <file>
11、从版本库中删除该文件
就用命令
git rm
删掉,并且git commit
12、关联远程库
要关联一个远程库,使用命令
git remote add origin git@server-name:path/repo-name.git
关联后,使用命令
git push -u origin master
第一次推送master分支的所有内容;此后,每次本地提交后,只要有必要,就可以使用命令
git push origin master
推送最新修改;
13、克隆远程库
要克隆一个仓库,首先必须知道仓库的地址,然后使用
git clone
命令克隆。Git支持多种协议,包括
https
,但通过ssh
支持的原生git
协议速度最快。
14、分支
git checkout
命令加上-b
参数表示创建并切换,相当于以下两条命令:(假设分支为dev)。git branch dev,git branch -d dev :删除dev分支
git checkout dev
git branch:查看当前分支
15、合并分支
git merge
命令用于合并指定分支到当前分支当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用
git log --graph
命令可以看到分支合并图。
16、常用总结:
查看分支:
git branch
创建分支:
git branch <name>
切换分支:
git checkout <name>
创建+切换分支:
git checkout -b <name>
合并某分支到当前分支:
git merge <name>
删除分支:
git branch -d <name>
17、git 忽略本地文件的修改
项目开发过程中,会遇到本地配置文件每个开发人员不同的情况,但如果遇到类似数据库配置这种最终需要加入 git 版本控制的配置,则会陷入两难境地。要么不跟踪,要么有人提交后其他人同步下来必须手动修改,非常麻烦。其实,对于已被纳入版本管理的文件,git 也提供了很好的解决办法。
告诉git忽略对已经纳入版本管理的文件 .classpath 的修改,git 会一直忽略此文件直到重新告诉 git 可以再次跟踪此文件
git update-index --assume-unchanged .classpath
查看当前被忽略的、已经纳入版本库管理的文件:
git ls-files -v | grep -e "^[hsmrck]"
18、git中submodule子模块的添加、使用和删除
背景
项目中经常使用别人维护的模块,在git中使用子模块的功能能够大大提高开发效率。使用子模 后,不必负责子模块的维护,只需要在必要的时候同步更新子模块即可。本点主要讲解子模块相关的基础命令。
子模块的添加
添加子模块非常简单,命令如下:
git submodule add <url> <path>
其中,url为子模块的路径,path为该子模块存储的目录路径。
执行成功后,git status会看到项目中修改了.gitmodules,并增加了一个新文件(为刚刚添加的路径)
git diff --cached 查看修改内容可以看到增加了子模块,并且新文件下为子模块的提交hash摘要
git commit提交即完成子模块的添加
子模块的使用
克隆项目后,默认子模块目录下无任何内容。需要在项目根目录执行如下命令完成子模块的下载:
git submodule init
git submodule update
或:
git submodule update --init --recursive
执行后,子模块目录下就有了源码,再执行相应的makefile即可。
子模块的更新
子模块的维护者提交了更新后,使用子模块的项目必须手动更新才能包含最新的提交。在项目中,进入到子模块目录下,执行 git pull更新,查看git log查看相应提交。完成后返回到项目目录,可以看到子模块有待提交的更新,使用git add,提交即可。
删除子模块
有时子模块的项目维护地址发生了变化,或者需要替换子模块,就需要删除原有的子模块。删除子模块较复杂,步骤如下:
- rm -rf 子模块目录 删除子模块目录及源码
- vi .gitmodules 删除项目目录下.gitmodules文件中子模块相关条目
- vi .git/config 删除配置项中子模块相关条目
- rm .git/module/* 删除模块下的子模块目录,每个子模块对应一个目录,注意只删除对应的子模块目录即可
执行完成后,再执行添加子模块命令即可,如果仍然报错,执行如下:
git rm --cached 子模块名称
完成删除后,提交到仓库即可。