git初步使用
前言
本文主要记录通过4个在开发过程中常见的使用场景学习git的基本操作
参考文献https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg
Git 的基本操作大致如下图。

场景一:Git 本地版本库的基本用法
场景一主要是在本地对源代码进行基本的版本控制,主要通过git add和git commit -m提交版本,有了提交记录之后可以灵活
地将当前工作区里的源代码回退到过去的某个版本,也就是回到过去。回到过去之后,也有可能发现之前撤销的某个版本是
有价值的,希望找回来,这就需要回到未来。过去和未来之间的分界点就是HEAD,即当前工作区所依赖的版本。
1 git init #初始化一个本地版本库

此时我们还可以在.git目录下能找到更多的关于版本库的信息

1 git status # 查看当前工作区(workspace)的状态

1 git add file1 # 把文件添加到暂存区


git commit -m "first commit” # 把暂存区里的文件提交到仓库,并使用m参数,添加提交注释

1 git log #使用git log 查看提交历史

1 git reset --hard commit-id #通过commit-id回退到此时的版本库

1 git reflog #可以查看当前HEAD之后的提交记录,便于回到未来

通过git log可以看到历史提交和commit-id,并可以通过commit-id回到过去

1 git reset —hard # 回退
![]()

场景二:Git 远程版本库的基本用法
1 git clone https://github.com/zhusihan/git_learn.git #使用git clone 从远程版本库下载源码
直接输入git remote可以看到git clone之后默认的远程存储库名称为orgin。
使用git remote -v 可以查看更详细的远程存储库信息,包括fetch(抓取)的远程存储库URL和push(推送)的远程存储库URL。

与场景一类似,之后我们可以在本地对当前项目进行修改,提交

1 git pull
2 git push
之后,我们可以使用上述两条语句,先从远程库拉取最新的版本库,以保证本地与远程版本库一致,之后再使用git push将本地修改推送到远程


场景三:团队项目中的分叉合并
如果团队项目像场景二的方法一样多人同时向远程origin/master分支频繁提交代码,一来可能会有诸多冲突合并的情况发生;二来整个git log提交记录中多个开发者或多个代码模块的commit是交错排列在同一条时间线上,不利于回顾查看和回退代码,让跟踪代码的成长轨迹变得异常困难。
我们需要考虑新的方式来能够独立维护不同的开发者或者不同的功能模块的代码,让一段连续的工作在commit日志的时间线上呈现为一段独立的分支线段,只在关键节点处进行分支合并。
1 git branch
2 git checkout -b mybranch
3 git branch
通过git branch 我们可以看到此时本地只有一个main分支,之后通过git checkout -b mybranch可以创建一个叫mybranch的分支,并且切换至该分支。再通过git branch 我们可以看到此时已经有两个分支并切换。

在该分支上完成某单一功能模块或代码模块的开发工作;多次进行如下操作

最后,先切换回master分支,将远程origin/master同步最新到本地存储库,再合并mybranch到master分支,推送到远程origin/master之后即完成了一项开发工作


从gitk我们可以看到两个分支已经合并。这样在Git分支网络图中该工作有一段明确的分叉合并路径,如果整个团队每一项工作都参照这个工作流程,那么最终Git分支网络图中就会留下清晰的项目演进成长路径

场景四:Git Rebase
一般我们在软件开发的流程中,有一个朴素的版本管理哲学:开发者的提交要尽量干净、简单。开发者要把自己的代码修改按照功能拆分成一个个相对独立的提交,一个提交对应一个功能点,而且要在对应的 commit log message 里面描述清楚。因此在合并和 push 之前检查修改一下 commit 记录时常需要。
场景四实际就是在场景三团队项目工作流程中增加一步Git Rebase,即在mybranch分支上完成自己的工作之后,为了让 log 记录将来更容易回顾参考,用 git rebase 重新整理一下提交记录。注意不要通过rebase对任何已经提交到远程仓库中的commit进行修改。
我们先从远程clone一个项目

我们可以在本地checkout一个分支,并在该分支上完成多个功能,多次提交,最后合并

从下图历史提交记录可以看到,不使用rebase,每次提交log都会全部记录下来

此时,我们再checkout一个分支做对比,在该分支上,我们提交了 aa,bb,cc

1 git rebase -i HEAD^^^
输入上述命令,在vim中,将commit aa,bb之前的pick前缀可以改成fixup(或者通过将pick改成drop,放弃commit,若产生冲突还需要手动解决),之后通过git rebase --continue完成变基。这时我们可以看到在git log中看不到commit aa,commit bb

之后切换分支,合并mybranch,然后执行git pull与远程版本库保持同步,最后再git push推送即可。

最后从gitk上,我们也可以看到,之前我们在mybranch的提交也只剩下了commit cc

总结
现在在工作中,git已经成为企业所必需的项目管理工具,使用git已经成为了每个工程师所需要掌握的基本技能,通过这以上几个场景的学习,我们可以基本掌握git在开发过程中的常用操作,对未来工作有很大帮助。

浙公网安备 33010602011771号