Git使用心得体会
前言
作为软件工程的学生,Git在实践中的重要性毋庸置疑。由于本科期间没有接触到GIT相关的知识和用法,因此特别感谢孟宁老师带我们学习了Git的基本用法。本博文主要整理了相关知识点,包括了git本地库的基本命令、git本地库和远程库的交互、以及多人协作的实例,分为四个场景来展现git和github的常见用法。
本文使用git终端命令行Git Bash来展示相关命令。使用Github展示本地库和远程库的交互。
本文主要参考自:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg
Git是一种分布式版本控制系统。Git的数据不止保存在服务器上,同时也完整的保存在本地计算机上,这种特性带来许多便利,比如你可以在完全离线的情况下使用Git,随时随地提交项目更新,而且你不必为单点故障过分担心,即使服务器宕机或数据损毁,也可以用任何一个节点上的数据恢复项目,因为每一个开发节点都保存着完整的项目文件镜像。

说明:
- workspace:本地工作区
- staging area:本地仓库暂存区/缓存区
- local repository:或本地仓库
- remote repository:远程仓库
场景一:Git本地库的基本用法
1.初始化仓库
Git init:
使用该命令完成Git本地库的初始化工作

查看隐藏的项目,会发现多了一个隐藏的文件夹 .git,这个目录中存放的是本地库相关的目录和文件,注意不可随意删除。


Git status:
使用该命令可以查看当前工作区的状态,由于该仓库创建基于个人文档文件夹,已经存在许多文件。

文件变为红色,命令行提示我们应该使用 add 命令将修改后的、工作区的文件添加到暂存区


vim 文件名:
该命令创建一个新文件,使用vim编辑器。进入vim编辑器的窗口,如下图所示

我们在编辑器中插入一段文本后,按下ESC进入命令模式,再按下 :wq 强制保存退出到git命令行界面

git add 文件名:
通过git add test.txt命令将该文件添加到本地仓库缓存区

git commit -m "操作名":
再通过git commit -m "first commit"命令将其提交到本地仓库中。
第一次输入出错,因为没有输入本地用户信息。


git log:
该命令执行查询工作
在vim中打开text1,在末端添加了一行“新增一条记录”(如下图所示)。并且提交 commit到本地库。然后执行 git log :

git reset --hard [局部索引值] :
使用该命令进行版本回退操作


git reflog:
可以查看当前HEAD之后的提交记录

git reset --hard +索引哈希值:

这里的 git reset 命令有三个参数,分别是 --soft,--mixed,--hard 。--soft 仅仅在本地库移动HEAD指针,--mixed在本地库移动HEAD指针并且重置暂存区;--hard在本地库移动HEAD指针,并且重置了暂存区和工作区。
场景二 Git远程版本库的基本用法
首先在我自己的github上新建一个远程仓库,然后模拟远程库和本地库的push和pull操作。
git clone:
用git clone命令将远程仓库的代码克隆到本地,以建立远程仓库和本地仓库的对应关系
git remote -v:
用git remote -v命令查看远程仓库的别名的实际链接地址

如果手动创建git repo的话,默认是没有remote的,需要手动添加。git remote add origin <url>. "origin"可以换成其它名字,url是远程仓库的地址。如果用git clone的话,会自动创建一个remote origin。

接下来在github上创建了一个Test项目 , 并生成一个README.md文件

git fetch:
运用命令下载一个远程存储库数据对象等信息到本地存储库

一些其他可能用到的指令将在场景三和四中使用:
git clone命令官方的解释是“Clone a repository into a new directory”,即克隆一个存储库到一个新的目录下。
git push命令官方的解释是“Update remote refs along with associated objects”,即将本地存储库的相关数据对象更新到远程存储库。
git merge命令官方的解释是“Join two or more development histories together”,即合并两个或多个开发历史记录。
git pull命令官方的解释是“Fetch from and integrate with another repository or a local branch”,即从其他存储库或分支抓取并合并到当前存储库的当前分支。
场景三 团队项目中的分叉合并
git checkout -b 分支名:
使用git checkout -b newbranch指令创建一个新的分支

git branch:
使用git branch指令查看所有分支

因为本地分支与远程分支没有建立关系
使用git branch --set-upstream-to=origin/main master命令建立关系

使用git branch -vv查看本地分支和远程分支的关联关系

在使用的时候,git merge,又出现了以下的问题

对于这个问题,使用git pull origin master --allow-unrelated-histories 来处理一下


成功解决

把我们的更新进行commit要么就先stash本地更新
git stash
git pull
git stash pop
git stash:备份当前的工作区,从最近一次提交中读取相关内容,让工作区保持和上一次提交的内容一致。同时,将工作区的内容保存到git栈中。
git stash pop:从git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个stash的内容,所以用栈来管理,pop会从最近一个stash中读取内容并恢复到工作区。
git stash list:显示git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear:清空git栈。

将newbranch合并到main,那么首先确保当期工作区处于main分支,可以使用git checkout main命令切换到main分支
在该分支上使用git pull origin master将远程仓库的最新版本同步到本地仓库,再在master分支上使用git merge --no-ff mybranch对master和mybranch分支进行合并。

最后将合并后的master分支使用git push origin master提交到远程仓库,模拟完成了一项开发任务的场景。

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

删除最后一条记录和重复的操作记录,再执行git log操作查看操作记录,发现已经修改:

总结
至此,我们由简单到复杂、从实际操作到背后的基本原理,并通过命令行的方式给出了实际操作的步骤,在四大场景下给出了Git的参考用法。
通过老师的讲解,我们知道了如何初始化本地库,进行本地库的基本操作;如何创建远程库,远程库和本地库是如何交互的。
Git仓库管理的各种实现细节是非常重要的,在操作工程中我也遇到了许多的问题和BUG,但是一系列操作让我受益良多,希望大家共同学习,掌握Git这一得力工具!

浙公网安备 33010602011771号