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这一得力工具!

 

posted @ 2020-10-13 20:08  fancyw  阅读(346)  评论(0)    收藏  举报