一、了解几个概念之间的关系
- 工作区:
简单来讲就是你项目的根文件夹。
- 暂存区:
就是你现在在本地文件夹所做修改之后还没将代码push到远程服务器的一个东西,通常叫做:stage或者index。
-
本地版本库
就是在文件夹下面的一个隐藏文件 .git,这个其实就是git的版本库文件 -
远程版本库
就是可以给别人下载的服务器的代码储存空间,类似于github,gittee这类
以上都是我个人理解的通俗意义。
实用操作:
git clone
这是从服务器中拉取代码。用法是:
git clone 远程仓库地址
git config :配置开发者的邮箱和用户名
用法:
git config user.name 用户名
git config user.email 邮箱
git branch:用于创建、重命名、查看、和删除项目分支
用法:
git branch today/v1:创建today/v1项目分支
git branch -m today/v1 today/0.0:重命名分支名称为today/0.0
git branch :查看当前的项目分支列表
git branch -d today/0.0:删除today/0.0的分支
git branch -a:查看本地版本库和远程版本库上的分支列表
git branch -r:查看远程版本库上的分支列表
git branch -D:分支未提交到本地版本库前强制删除分支
git branch -vv:
查看带有最后提交id、最近提交原因等信息的本地版本库分支列表
git checkout:用于切换当前操作的代码分支
用法:
git checkout today/0.1:切换到today/0.1分支
git checkout -b daily/0.0.1:创建 daily/0.0.1 分支,同时切换到这个新创建的分支
git status:查看文件的当前状态
git add:添加文件变动到暂存区
用法:
git add 文件名
git commit :提交文件到本地版本库
用法:
git commit -m '提交原因描述'
git push:将本地仓库代码改动推送到远程服务器
用法:
git push origin today/0.1:origin指的是当前的git服务器地址。这句话的意思是将当前的today/0.1分支推送到远程服务器
将代码上传之后,就需要将代码下载下来了。
git pull origin today/0.1:表示将today/0.1分支改动拉取到本地
如果线上代码做了变动,而你本地的代码也有变动,拉取的代码就有可能会跟你本地的改动冲突,一般情况下 Git 会自动处理这种冲突合并,但如果改动的是同一行,那就需要手动来合并代码,编辑文件,保存最新的改动,再通过 git add . 和 git commit -m ‘xxx’ 来提交合并
git log:查看整个项目的版本提交记录,包含了提交的日期时间,原因等,记录过多可通过J和K上下翻看,Q退出
git log -p:显示带提交差异对比的历史记录
git log demo.html:显示 demo.html 文件的历史记录
git log --since="2 weeks ago":显示2周前开始到现在的历史记录,其它时间可以类推
git log --before="2 weeks ago":显示截止到2周前的历史记录,其它时间可以类推
git log -10:显示最近10条历史记录
git log f5f630a..HEAD:显示从提交ID f5f630a 到 HEAD 之间的记录,HEAD 可以为空或其它提交ID
git log --pretty=format:"%h":格式化输出历史记录
------------ Git 用各种 placeholder 来决定各种显示内容,我挑几个常用的显示如下:---------------------------
%H: commit hash
%h: 缩短的commit hash
%T: tree hash
%t: 缩短的 tree hash
%P: parent hashes
%p: 缩短的 parent hashes
%an: 作者名字
%aN: mailmap的作者名
%ae: 作者邮箱
%ad: 日期 (--date= 制定的格式)
%ar: 日期, 相对格式(1 day ago)
%cn: 提交者名字
%ce: 提交者 email
%cd: 提交日期 (--date= 制定的格式)
%cr: 提交日期, 相对格式(1 day ago)
%d: ref名称
%s: commit信息标题
%b: commit信息内容
%n: 换行
git tag:标记里程碑。当我们完成某个功能需求准备发布上线时,应该将此次完整的项目代码做个标记,并将这个标记好的版本发布到线上,这里我们以 publish/0.0.1 为标记名并发布
用法:
git tag publish/0.0.1
git push origin publish/0.0.1
touch .gitignore:创建一个文件.gitignore
并在编辑器中打开文件,每一行代表一个要忽略的文件或目录,如:
demo.html
build/
以上内容的意思是 Git 将忽略 demo.html 文件 和 build/ 目录,这些内容不会被推送到服务器上
操作文件:
git add -i:通过此命令将打开交互式子命令系统,输入相应的字母或者序列号就可以选择相应的功能
各首字母表达含义
status:查看文件状态
update:更新操作
revert:把已经添加到暂存区的文件从暂存区剔除,其操作方式和 update 类似
add untracked:可以把新增的文件添加到暂存区,其操作方式和 update 类似
patch:选择后 Git 会显示这些文件的当前内容与本地版本库中的差异,然后您可以自己决定是否添加这些修改到暂存区,在命令行 Stage deletion [y,n,q,a,d,/,?]? 后输入 y,n,q,a,d,/,? 其中一项选择操作方式,具体功能解释如下:
y:接受修改
n:忽略修改
q:退出当前命令
a:添加修改
d:放弃修改
/:通过正则表达式匹配修改内容
?:查看帮助信息
diff:比较暂存区文件和本地版本库的差异,其操作方式和 update 类似
quit:退出 git add -i 命令系统
help:查看帮助信息
git add -u:进入交互式命令中的update模式。它会先列出工作区 修改 或 删除 的文件列表,新增 的文件不会被显示,在命令行 Update>> 后输入相应的列表序列号表示选中该项,回车继续选择,如果已选好,直接回车回到命令主界面
git commit -m '第一行提交的原因'-m'第二行提交的原因':不打开编辑器,直接在命令行中输入多行提交原因
git commit -am '提交原因':将工作区 修改 或 删除 的文件提交到本地版本库, 新增 的文件不会被提交
git commit --amend -m '提交原因':修改最新一条提交记录的提交原因
git commit -C HEAD:将当前文件改动提交到 HEAD 或当前分支的历史ID
git fetch origin daily/0.0.1:默认情况下,git fetch 取回所有分支的更新。如果只想取回特定分支的更新,可以指定分支名。
git mv:移动或重命名文件、目录
用法:
git mv a.md b.md -f :将a.md重命名为b.md,同时添加变动到暂存区
git rm:从工作区和暂存区移除文件
git rm src/ -r :允许从工作区和暂存区移除目录
git status -s:以简短方式查看工作区和暂存区文件状态
git status --ignored :查看工作区和暂存区的文件状态,包括被忽略的文件
git merge --no-ff:默认情况下,Git 执行"快进式合并"(fast-farward merge),会直接将 Master 分支指向 Develop 分支,使用 --no-ff 参数后,会执行正常合并,在 Master 分支上生成一个新节点,保证版本演进更清晰
git merge --no-edit:在没有冲突的情况下合并,不想手动编辑提交原因,而是用 Git 自动生成的类似 Merge branch 'test'的文字直接提交
git revert:撤销某次操作
git revert HEAD:撤销前一次提交操作
git revert -n HEAD:需要撤销多次操作的时候加 -n 参数,这样不会每次撤销操作都提交,而是等所有撤销都完成后一起提交
如果在GitHub项目初始化之前,文件已经存在于本地目录中,那可以在本地初始化本地版本库,再将本地版本库跟远程版本库连接起来
git init:在本地目录内部会生成.git文件夹
git remote -v:不带参数,列出已经存在的远程分支,加上 -v 列出详细信息,在每一个名字后面列出其远程url
git remote add origin https://github.com/gafish/gafish.github.com.git:添加一个新的远程仓库,指定一个名字,以便引用后面带的URL
git archive -v --format=zip v0.1 > v0.1.zip:将加了tag的某个版本打包提取。
--format 表示打包的格式,如 zip,-v 表示对应的tag名,后面跟的是tag名,如 v0.1。
具体配置看我的前一篇:点击前往地址