Git使用心得
这是我第一次写博客,另外也是我第一次接触到Git,如有错误,还请大家指教。
然后十分感谢孟宁老师深入浅出的教学,让我收获很多,能够对Git有了一个初步而又较为系统的了解,也意识到了Git作为代码托管工具的必要性与其强大之处。
本文参考文献为:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg
一.Git本地版本库的使用
1.git init命令的作用。
在这里我首先创建了一个空文件夹,该空文件取名为"Git初始使用"。从下图可见在未用git init命令生成仓库时,文件夹内部无任何文件。

之后当我在vscode中打开"Git初次使用",并在终端输入Git init后,可发现在“Git初次使用”这个文件夹内部生成了一个名为.git的隐藏文件,这表明已经完成了仓库的初始化。


2.git status的作用是显示文件和文件夹在工作区和暂存区的状态。
之后我在“Git初次使用”这个文件夹内部再创建了一个1.txt的文本文件,下面两个图分别展示了1.txt文件的新添的内容与在终端输入git status后的作用。


可以看到1.txt未被追踪(还未被加入到暂存区),要将1.txt加入到暂存区,那么就得使用git add .这条命令。
3.git add 命令的作用。
这条命令的作用是将某个文件、文件夹或者是全部文件添加进暂存区。如git add FILES是将指定的FILES文件加入到暂存区,而git add .则是将所有未被加入到暂存区的文件和文件夹全部加入到暂存区中被追踪,在这里我们使用git add .这条命令,然后再使用git status命令查看一下1.txt文件的状态,如下图所示。

可以看到,在执行了git add .这条命令后1.txt文件已经被追踪。
4.git commit 命令的作用
在文件被追踪之后,我们还需要将改动提交到本地的版本库中,因此我们这里要用到git commit这条指令。
git commit这条指令有两种用法:第一种是git commit -m "版本描述",第二种是git commit -am "版本描述"。
这两个的区别在于git commit -m使用之前需要使用git add .将改动存放到暂存区中然后再用git commit -m 这条指令将改动提交到本地的版本库中。
而git commit -am这条指令则是将git add .与git commit -m这两个指令结合在一起执行,但这里有个要注意的地方,那就是如果某个文件或者文件夹还从未被git add过,也就是从来没有被追踪过,那么此时只能用git add .和git commit -m这两条指令的组合,而不能用git commit -am这条指令。
下图就展示了这条指令的使用。


5.git log的使用
因为我一共提交了两次,所以会有两条记录。如果要查看以前的提交记录,那么就要使用git log这条命令。
通过git log这条指令我们可以查看历史提交记录,在这里我使用git log --oneline这条指令,以精简模式显示历史提交记录。

从上图可以看出我们有两次提交记录,第一次记录的描述为“第一次提交”, 第二次记录的描述为“第二次提交”,另外每条记录最前面的黄色字段是每次提交对应的哈希值。
6.git reset --hard指令
假设当前版本有很多bug无法解决,要回溯到以前无bug的版本,那么此时就需要用git reset --hard这条指令去操作了。
例如git reset --hard HEAD^表示回退到当前指针指向的版本的前一个的版本,而git reset --hard HEAD^^则表示回退到上上个版本,接着就是git reset --hard HEAD^^^是回退到上上上个版本,以此类推。那么如果我要回退到某个特定的版本,那么我们应该用git reset --hard 再加上那一次提交对应的hash值的头几个字符。比如我们要回到第一次提交这个版本,而第一次提交的hash值的前几个字符在上图中可以看到是4d7f63b,那么这里我们用git reset --hard 4d7f63b来回退到第一个版本。

从提示中可以看到此时指针HEAD已经指向了第一次提交。
另外在这里,最后提一下git reflog这条指令,因为之前的git log指令只能显示HEAD指针之前的提交记录(包括HEAD指向的这次提交),因此当我们用git reset --hard回退到之前的某个提交,该次提交的名字比如取为版本5,再用git log就不会显示版本5之后的那些提交记录了,此时我们就有必要用git reflog命令去查看到所有的提交记录。

上图便是git log --oneline和git reflog这两条命令的结果对比。
以上是关于Git本地版本的相关指令的用法。
二.Git远程版本库的使用
首先我在Gitee上创建了一个名为"Gitee初次使用"的远程版本库,里面包含了一个.gitignore文件和一个名为test的文件,另外test中的内容为"Gitee的初次使用."。


1.git clone命令
此时我在vscode打开一个空文件,并输入git clone命令将远端版本库克隆过来。


2.git push命令
从上图可以看到已经将远端版本库克隆至本地,接着路径切换到first-use-gitee文件夹下进行其他操作。
我们先在test文件中添加个一句话,对test的内容进行修改,然后我们想把这个更新推送到远端仓库中。那么就要用到git push操作,在这之前可以用git remote add操作关联相关的远端仓库。

那么我用git push origin master这条指令就可以将相应的改变同步到远端库中。


在上图中,可以很清楚的看到Gitee中的远端仓库的test文件内容多了一句话,实现了与本地库的同步。
3.git pull命令
我们也可以通过git pull指令拉取远端仓库中的内容进行合并,这里就不考虑发生冲突的情况了。
此时我在远端仓库中的test文件内再一次添加一句话。

那么我们可以通过git pull操作将这个改变同步到我们的本地库中。


从上图可以看到,本地仓库的test文件的内容已被更新。
三.团队项目中的分叉合并
在团队开发中,每个人要为自己的工作创建一个分支,那么在工作完成后就需要将分支合并到主分支中,这一部分就是列举几个常用的关于分支的操作。
1.git branch命令
git branch + 分支名字作用是创建一个分支。
git branch如果后面不跟别的东西,那就是查看当前所有的分支。

从上图可见,当前创建了一个名为“分支1”的分支,还有一个默认的master主分支,并且*在master分支前,说明现在处在master分支上。
2.git checkout命令
如果我们要切换到分支1,那么我们就要用到git checkout指令进行这个操作。这里我们用的是"git checkout 分支1"这条指令。

从提示中可以看到当前已经切换到分支1。
3.git merge指令
我们对分支1中的test文件进行修改,修改内容具体为在里面添加了一句话“分支1的修改.”

我们此时要将分支1合并到master分支上,那么我们要先切换到master分支中,然后再执行git merge master。


从上图可以看到master已经实现了和分支1的合并。当然在实际操作,git merge操作会产生冲突,那么此时就要去解决冲突,冲突解决完后才是合并的结果。
4.git merge --no-ff指令
通常git merge操作都是快进式合并,即将被合并的分支与主分支合并到同一时间线,那么如果不想要快进是合并的话,那就要添上--no-ff这个参数表明不用快进式合并。
四.Git Rebase的使用
如果有许多冗余的提交时,那么会给项目的维护带来不必要的麻烦,特别是在查看日志的时候,会耗费很长的时间。
运用git rebase指令,可以将冗余、不必要的提交合并,从而使提交日志更加简明清晰,便于项目的维护。
我添加了三次提交其名字分别是:"提交1"、"提交2"和"提交3"。

那么现在我就要用git rebase指令来合并提交,输入git rebase -i HEAD^^。
之后删去提交2,再处理冲突,执行git add .和git rebase --continue等操作之后,可以看到提交2已经不见。

由此简化了提交记录。
五.Fork + pull request
在开源项目中,需要用到 Fork和pull request,大致流程是先用fork拷贝一份别人的仓库,然后再在fork的版本库中进行代码的修改或者添加,接着发起pull request给原仓库,在原仓库拥有者审核改动后,如果没有问题,便会merge pull request到原仓库中。
六.总结
高级软件工程这门课让我认识到了代码版本管理的重要性,认识到了软件开发过程中可能会遇到的问题的复杂性和多样性,因此深刻体会到了git作为代码版本管理工具的强大性,今后也会继续深入地学习git和相关软件的使用,提高自己的自己的知识水平和相关能力。

浙公网安备 33010602011771号