相关材料
常用命令
仓库的初始化
本地创建新的仓库
1 | 新建一个git仓库,运行完后会在当前目录下生成一个.git 目录 |
从远程仓库中拉取一个仓库到本地
完成秘钥配置后,可以将gitlab上的项目下载到本地进行部署
1 | git clone remote-repertor(https://github.com/libgit2/libgit2) local—repertory(可以省了默认保持原仓库名称) |
完成项目到本地的传输后,可以进行相应的安装或使用,git clone仅能用于将远程项目初始化到本地(从无到有)不支持后续的更新同步
下载更新
作为多人版本协作,会有不同的人同时对项目进行更新,所以有时候会有需求将他人的更新同步到本地流程中,使用 git pull命令
- 正规流程
1 | git status(查看本地分支文件信息,确保更新时不产生冲突) |
- 快速流程
1 | 上面是比较安全的做法,如果你可以确定什么都没有改过只是更新本地代码 |
- 获取所有分支
一般情况,我们也许只对主分支感兴趣,但是有时候,我们可能会需要获取所有的分析版本,来进行一些代码的核验或者代码的确认,1
2
3git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
版本管理
提交更新
提交更新主要分三个部分,1,更新提交到本地暂存区;2.更新到本地版本库;3.推送更新。
1 | git add file.name #将更新的文件提交到本地的缓存区; |
添加tag
像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点( v1.0 、 v2.0 等等)。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17列出标签
git tag
例如符合条件的标签
git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5-rc3
创建标签,其中 -m可选,版本校验值缺省时默认是当前版本
git tag -a v1.4 -m "my version 1.4" ca82a6dff817ec66f44342007202690a93763949
共享标签, 标签在推送时,默认是不会进行推送的,需要进行显式的提交
git push origin v1.5 # 推送指定的tag版本(v1.5)
git push origin --tags # 推送全部tags
查看本地的版本记录
1 | 查看版本更新日志 |
比较两个版本之间的区别
1 | 查看任意两个版本之间的改动: |
对本地版本进行更改
1 | git reset gitversion filename# 撤销提交缓存区的偶作 |
–hard 不保存所有变更
–soft 保留表更且变更内容处于staged
–mixed 保留biang且变更内容处于modified(默认)
对特定文件进行管理 - 恢复修改的文件
只修改了文件,没进行任何git操作
1
2只是修改了文件,没有任何 git 操作,直接一个命令就可回退:
git checkout -- aaa.txt # aaa.txt为文件名修改了文件,并提交到暂存区(即编辑之后,gitadd但没有 git commit -m ….)
1
2
3git log --oneline # 可以省略
git reset HEAD # 回退到当前版本
git checkout -- aaa.txt # aaa.txt为文件名修改了文件,并提交到仓库区(即编辑之后,gitadd和 git commit -m ….)
1
2
3git log --oneline # 可以省略
git reset HEAD^ # 回退到上一个版本
git checkout -- aaa.txt # aaa.txt为文件名
分支管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23列出分支命令:
git branch
创建分支命令:
git branch (branchname)
切换分支命令:
git checkout (branchname)
创建并切换该分支
git checkout -b <name>
合并分支命令:
git merge newtest # 将newtest分支合并到当前分支
重命名分支
git branch -m/-M <oldname> <newname>
删除分支命令:
git branch -d (branchname)
恢复的删除分支
git branch <name> <删除分支的commitID>
比较两个分支
1 | 显示出branch1和branch2中差异的部分 |
远程仓库操作
1 | 克隆一个已有的远程git仓库 |
Patching
有记录的进行版本回退。
1 | Given one or more existing commits, revert the changes that the related patches introduce, and record some new commits that record them. |
merge
整个分支的merge
merge操作时,默认是将整个分支的更改合并到当前分支中。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18git merge
--edit和-e # 用于在成功合并、提交前调用编辑器来进一步编辑自动生成的合并信息。因此使用者能够进一步解释和判断合并的结果。
--no-edit # 参数能够用于接受自动合并的信息(通常情况下并不鼓励这样做)。
--ff # 是指fast-forward命令。当使用fast-forward模式进行合并时,将不会创造一个新的commit节点。默认情况下,git-merge采用fast-forward模式。
--ff-only # 除非当前HEAD节点已经up-to-date(更新指向到最新节点)或者能够使用fast-forward模式进行合并,否则的话将拒绝合并,并返回一个失败状态。
--no-ff命令 # 即使可以使用fast-forward模式,也要创建一个新的合并节点。这是当git merge在合并一个tag时的默认行为。
--log[=<n>]# 将在合并提交时,除了含有分支名以外,还将含有最多n个被合并commit节点的日志信息。
--no-log # 并不会列出该信息。
--stat # 参数将会在合并结果的末端显示文件差异的状态。文件差异的状态也可以在git配置文件中的merge.stat配置。
-n/--no-stat # 参数将不会显示该信息。
--squash # 当一个合并发生时,从当前分支和对方分支的共同祖先节点之后的对方分支节点,一直到对方分支的顶部节点将会压缩在一起,使用者可以经过审视后进行提交,产生一个新的节点。开发者可能在本地提交了大量且无意义的节点,当需要合并到develop分支时,可能仅仅需要用一个新的节点来表示这一长串节点的修改内容,这时--squash命令将会发挥作用。如果功能分支的多次提交并不是琐碎而都是有意义的,使用--no-ff命令更为合适。
-q和 --quiet # 静默操作,不显示合并进度信息。
--no-commit # merge命令默认会将分支合并后,直接进行commit提交,有时候我们可能会先核查相关的文件变动不想立即提交可以选择该参数。完成调整后再使用commit单独提交。
git merge --abort # 在合并出现冲突时使用,放弃合并过程,重建合并前的状态
git merge
merge其他分支的某个commit
首先在开发分支上获取要合并commit的commitID,1
git log --oneline
然后切换到目标分支进行merge
1 | git checkout main # 切换到要进行修改的分支 |