- Git 从入门到掐死教程 (简易教程)
- 主要整理了一下之前实习过程中一些 Git 的操作核问题的处理
- 并为自己整理的 Git 命令集提供相应的索引
- 未完待续~
写在前面
- Git 相关的基础教程已经很多了,个人觉得对新人比较友好的教程为 廖雪峰的 Git 教程。
- 建议在上文提到的教程(一定要动手敲键盘鸭!)基础上再结合本文一起食用更佳。
- 本文不再对基本操作做过多介绍,简单提及主要流程,主要针对特殊场景(开发常用)进行讲解。
- 针对一些常用的 Git 高级命令,请参考 BlogIssue 常用Git命令 (长期更新)
- ...
- BTW,其实现有的 GUI 工具已经做的很好了 (直观且易用) ,熟练掌握 GUI 的使用,不会命令行也没太大关系。
- SourceTree
- Git GUI:Git 官方 GUI
- Github Desktop
- IDE 集成的 Git 工具等等
正文
Git 仓库级别的管理
创建的两种方式
- 本地初始化:
git init
- 远程仓库克隆/下载:
git clone [ssh-url/http-url]
两种创建方式的区别
- 本地初始化只是在本地建立了一个对应的 Git 仓库,未和远端仓库建立相应的关系,只使用了一些默认的配置;
- 远程仓库在克隆时已经加载了远程仓库中存储的关于该仓库的 Git 配置;
Git 本地仓库建立与远程仓库的联系
- Git 仓库可以实现 本地 1:N 远程的关系,从而同步到多个远程代码库
- 添加新的映射关系:
git remote add [name] [url]
- 查看已有的映射关系:
git remote -v
Git 的日常操作流程
1.养成好习惯-工作之前保持同步
- 下拉远程端最新的提交:
git pull [remote-name] [remote branch]
2.(可选) 下拉过程的特殊处理
- 如果本地已经存在部分修改,和远程端新的提交的修改的文件一致,Git 检测到文件版本不一致,拒绝下拉。此时可根据实际情况决定如何操作:
- 保留本地修改:
- 使用
git stash
暂存本地修改到一个栈中;
- 正常下拉远程端最新的提交;
git stash pop
弹栈之间暂存的提交,自动合并;
- 合并中如果出现冲突相应地解决冲突。
- 不想保留本地修改:
- 还未添加到缓冲区中:可以直接丢弃掉本地已有的修改
git checkout -- filepathname
- 已经添加到缓冲区中:使用
git reset HEAD filepathname
- 已经有了本地的提交:可以使用
git reset --hard HEAD^
来回退到上一次commit的状态
- 本地和远程端同时都信了新提交的时候,为了让整个提交的历史记录能够更加的简洁完整,避免一些不必要的合并操作,保证提交树的结构是线性的,可以使用
git pull --rebase
来自动地根据相应的提交时间进行友好的合并。
3.工作时注意文件编码和文件符号
4.(可选) 新建一个本地分支用于特定功能
- 针对部分功能模块或者程序 Bug 的修复,建议本地基于需要迭代的版本新建开发分支进行开发
- 可参考 Git Branch 的相关命令来进行分支的管理
5.添加修改到缓冲区
- 可指定文件也可全部添加到缓冲区:
git add [..]
- 记得养成查看工作区状态的好习惯:
git status
6.提交缓冲区的带评论的修改
- 提交存在缓冲区中的修改:
git commit -m [comment]
- 提交时会生成一个全局唯一的 ID,便于后续对本次 commit 进行标识
- 记得养成查看工作区状态的好习惯:
git status
7.推送到远程仓库的某个分支保持一致
- 将本地提交推送到远程端:
git push [remote-name default:origin] [local-branch default master]:[remote-branch]
- 注意区分远端分支和本地分支,默认情况下保持远端和本地 master 分支同步
- (可选) 针对本地新建的分支,可以直接推送到远程端,远程端自动新建新分支,如果已有类似分支,也可进行本地和远程分支之间的绑定。
8.Git 平台提交一个 PR/MR 请求 review 和 合并
- 平台 GUI 操作, New Pull Request
- CI/CD 流程相关代码审查和测试来验证本次提交的正确性
- Reviewer 进行代码审核
- 代码审核通过相应地合并到对应的分支
- (可选,视业务情况而定)在进行了对应的人工测试和一系列回归测试之后,进行新版本的 Release
Git 历史记录追溯
查看 Git 提交记录(日志)
- 主要信息:commit-id, commit-comment
- 普通模式查看相关提交记录,退出按
q
:git log
- 简洁模式查看提交记录:
git log --pretty=oneline
- 可以使用某些参数对提交记录进行检索:
git log --author="Elvis Zhang"
比较前后提交的差异
HEAD
是一个指针,指向当前最新的提交
- 比较最近的一次提交和上一次的提交:
git diff HEAD~1 HEAD
- 可以设置参数来比较缓冲区的内容:
--cached
- 可以查看某个具体文件的修改内容:
git diff HEAD~1 HEAD src/tools/rbd_mirror/ImageReplayer.cc
- 针对不同的比较对象(缓冲区、工作区、已经提交的记录),可以使用如下命令:
>> git diff // Compare the cache and working area.
>> git diff --cached […] // Compare the cache area and latest commit. [..] file name
>> git diff HEAD […] // Compare the working area and latest commit.
>> git diff commit-id […] // Compare the workinga area and given commit.
>> git diff --cached [] […] // Compare the cache and given commit.
>> git diff [] [] // Compare two commits.
>> git diff --HEAD > patch-name // Make the differences between the working area and latest commit as a patch. And can use command git apply patch-name to apply patch.
版本回退
- 版本回退主要有两种模式:
hard
& soft
.
hard
:能够回退到指定分支的最新提交,也可以根据 commit-id 回退到某个具体的提交,但不保留已有的修改;
soft
:能够回退到指定分支的最新提交,也可以根据 commit-id 回退到某个具体的提交,保留修改到缓冲区中。
>> git reset --hard origin/master // Reset the cache and the commit
>> git reset --soft origin/master // Reset the commit and keep the modification.
查看Git命令执行历史
git reflog
// Show the git operation history