Git基本用法
Git基本用法
Miyako介绍
本文章主要记录Git基本知识,内容包括:
- Git的基本配置
- 暂存和提交
- 分支和合并
- rebase用法
- 远程库的操作
- 子模块的用法
Git的基础用法
Git的基础配置
创建一个本地Git版本库,可以使用以下命令:
1 | git init 让当前文件夹变成 git 仓库(创建 .git 文件夹) |
进行Git账号配置,若添加global的话则是本地创建的所有版本库都会遵循这个配置,若想单独配置则需要在项目文件夹里输入同时不加--global
。
1 | git config --global user.name "你的用户名" |
可以用以下命令查看配置:
1 | git config --list |
Git的暂存
首先对文件夹内进行修改,比如在文件夹中加入file.txt
文件,并且里面写入一些内容,随后可以使用以下命令加入到暂存区:
1 | git add file.txt |
需要查看暂存库的内容则输入:
1 | git status |
其中的三种状态tracked
,untracked
,ignored
,若新建文件了但是没有进行git add
操作,则该文件为untracked
,如下图所示。
如果需要进行删除的话:
- 如果你想从本地和 Git 版本库中删除文件,使用
git rm -f
文件,或者手动删除文件后用git add
文件更新状态 - 如果你已经将一个文件添加到暂存区,可以用
git rm --cached 文件
将其移出暂存区。 - 如果需要重命名或者更改路径,则可以输入:其中
1
git mv old_filename.txt new_directory/new_filename.txt
old_filename.txt
需要为tracked
状态即在暂存区。
选择需要ignore
的文件:
假设以经创建文件目录如图所示:
其中除了new
文件夹之外的四个文件都没有进行add
操作,创建.gitignore
的命令如下:
1 | vim .gitignore 创建一个.gitignore文件并且进入编辑 |
按下i
,进入insert
模式,输入*.c
表示忽略.c
结尾的文件,最后按下esc
,输入:wq
进行保存。
随后输入git status
,得到如下所示。
随后可以输入命令进行查看是否被忽略以及忽略规则:
1 | git check-ignore -v code1.c |
常用的模板为github/gitignore
Git的提交
commit命令
Git的提交可以将暂存内容提交到本地仓库,形成一个新版本。将暂存的内容提交的命令为:
1 | git commit -m "内容" |
可以用log
命令查看提交的日志:
1 | git log |
其中commit
后面的数字为sha-1标识符
,定位唯一的提交,可以通过以下命令显示信息(id不重复下可以写前几位):
1 | git show id |
其中checkout
命令用于分支间的切换:
1 | git checkout id |
Angular规范
在合作项目中,commit message
的书写规范十分重要,Angular规范里面大致包括更改的类型,范围,总结描述,详述,问题解决。
- type:提交的类型,标识提交的目的。
- scope:可选,提交的范围或模块,帮助指定影响的区域。
- subject:简洁明了的提交说明,描述这次提交的内容。
- body:可选,详细描述提交的内容和背景信息。
- footer:可选,提及相关的问题追踪系统中的问题,例如关闭某个问题。
版本控制
可以通过git tag
来创建轻量级标签,例如:
1 | git tag v0.0.1 |
随后就可以用git checkout v0.0.1
切换到这一个分支,并且在log
中也可以显示他的tag
,其中图中我在添加了tag
后又进行了一次提交
,使用checkout
即可切回上一个分支。
想要添加一些说明,则可以采用附注标签:
1 | git tag -a v0.0.2 -m "release v0.0.2" |
标注后,采用git show v0.0.2
显示如下,相比于直接创建tag
,多了Tagger
和Date
,以及附加的文字。
其次,在版本号命名也需要遵守一般规范,一般为:v主版本号.次版本号.修订号-预发布版本号
- 修订号:兼容修改,纠正不正确的行为
- 次版本号:添加新功能,保持兼容
- 主版本号:不兼容的API修改且为0时表示还在开发阶段,不保证稳定性
- 预发布版本号:alpha/beta/rc.1/rc.2/…
detached HEAD和分支
Detached HEAD
是 Git 中的一种状态,指的是当前的 HEAD
(指向当前所在的分支的引用)不指向任何分支,而是指向一个具体的提交。这意味着你在这种状态下所做的任何更改和提交,都不会被记录在任何分支中,除非你明确地将它们保存到一个新的分支或现有分支中。
例如我退回版本v0.0.1
,在这个情况下重新进行add
和commit
操作,这下HEAD
不会指向任何分支,这个时候如果切回master
分支,查看log
,发现修改不会出现在log
当中,所以这一次修改不能通过分支来切回去,只能通过提交时的id切回。
为了解决Detached HEAD问题,可以通过git checkout -b 分支名
来创建并切换到一个新的分支上,此外还有命令:
1 | git branch name 基于当前HEAD创建分支 |
将别的分支合并到当前分支,可以使用:
1 | git merge name1 name2 |
有新提交的情况下,合并后会生成一个新的提交。若合并有冲突则需要手动修改。
Git的进阶用法
修改提交历史
rebase
可以用在同一分支上,表现为修改提交历史,可以输入命令:
1 | git rebase -i id |
输入完会进入编辑页面,其中对各个节点前的状态更改可以进行不同的操作:
- pick:保留该提交
- edit:保留该提交,但会进入编辑状态
- squash:将该提交和上一个提交合并
- drop/ 删除整行:删除该提交
保存退出后,根据提示输入git commit --amend
,修改完成后输入git rebase --continue
。
远程版本库
通过命令将远程版本库克隆到本地:
1 | git clone src dest |
- src: 这是源仓库的地址。可以是一个远程仓库的 URL(例如 https://github.com/user/repo.git),也可以是本地路径(例如 /path/to/repo)。
- dest: 这是你希望克隆的仓库存放的目标目录。如果 dest 不存在,Git 会为你创建它,并将 src 仓库的内容复制到该目录中。
添加远程版本仓库:
1 | git remote add <name> <url> |
当你添加远程仓库后,使用 git remote -v
可以确认远程仓库是否正确配置。
从远程仓库进行pull
:
1 | git pull <远程仓库名> <分支名> |
例如:git pull origin main
会从 origin 远程仓库的 main 分支拉取最新的更改,并将这些更改合并到你本地的当前分支。
对远程仓库进行push
:
1 | git push <远程仓库名> <分支名> |
例如:git push origin main
会将你本地的 main 分支的更改推送到 origin 远程仓库的 main 分支。
在克隆自己拥有的仓库时,你有权限推送到 origin,在协作或开源项目中,可能需要 fork 并推送到你自己拥有的 fork 仓库。
submodule子模块
在一些项目中,你可能会依赖于其他项目的代码库,这些代码库可能由不同的团队或开发者维护。为了保持这些依赖的独立性和版本控制,你可以使用git submodule
将这些外部代码库嵌入到你的主项目中。比如原本的git版本库中里面也存在着另一个版本库,在内部的版本库中进行完add .
和commit
操作后,切到大版本库目录进行add .
操作会产生问题,此时需要先进行子模块的添加:
1 | git submodule add url path |
例如:git submodule add https://github.com/example/lib.git external/lib
这会将 lib
仓库作为子模块添加到 external/lib
目录中。