Git使用心得

参考文献:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg 

git 心得体会:

通过场景一到四以及练习题,了解到git本地版本库和远程库的基本用法,这些基本操作还是简单的,学习曲线并不陡峭,而且可以方便进行版本控制,对于团队项目的开发 是一个十分有用的工具。git采用的数据结构能够高效进行版本控制  值得我们好好学习 。

 

场景1:Git本地版本库的基本用法

 git init #初始化一个本地版本库

 

 git status #可以看到工作区文件状态

 

 git add [FILES] #将工作区里的文件添加到暂存区

 

 git commit -m "first commit test.txt" 把暂存区的文件提交到仓库

git log#查看当前HEAD之前的提交记录,便于回到过去

 继续用 git add 和 git log 操作添加了两个修改到仓库,通过git log 查看 当前HEAD之前的提交记录为:

 

 git reset --hard HEAD^/commit-id 回退到相应提交

git reflog # 可以查看历史记录版本号

 

 通过 git reset --hard commit-id #回到未来相应版本

 

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

 

场景二:Git 远程版本库的基本用法

 

 git remote add [远端代号][远端地址] #增加远程地址

 

git push# 将本地存储库的相关数据对象更新到远程存储库。

 

 

git pull [远程仓库名][远程分支 ]# 拉取远程仓库里的提交项到本地仓库并合并到当前分支。

在本地库继续提交一个“add 789 to test.txt”的修改,然后 用 git pull origin master 命令来将origin中的master分支fetch到本地仓库并merge到本地master分支更新本地仓库。如图所示:

在本地版本库基本用法的基础上,只需要用推送(git push)和拉取(git pull)就完成本地仓库和远程仓库的同步

 

场景三:团队项目中的分叉合并

  如果团队项目像场景二的方法一样多人同时向远程origin/master分支频繁提交代码,一来可能会有诸多冲突合并的情况发生;二来整个git log提交记录中多个开发者或多个代码模块的commit是交错排列在同一条时间线上,不利于回顾查看和回退代码,让跟踪代码的成长轨迹变得异常困难。

  我们需要考虑新的方式来能够独立维护不同的开发者或者不同的功能模块的代码,让一段连续的工作在commit日志的时间线上呈现为一段独立的分支线段,只在关键节点处进行分支合并。

  建议团队项目的每一个开发者都采用的工作流程大致如下:

  •   1     克隆或同步最新的代码到本地存储库;
  •   2     为自己的工作创建一个分支,该分支应该只负责单一功能模块或代码模块的版本控制;
  •   3     在该分支上完成某单一功能模块或代码模块的开发工作;
  •   4     最后,将该分支合并到主分支。

git branch -v # 查看当前分支

 git branch [分支名称] # 创建分支

git checkout  [分支名称] # 切换分支

 

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

  • git add FILES
  • git commit -m "commit log"

再执行 git log 来查看HEAD前提交记录,如图所示,在branc1分支继续添加了三个提交:“ add abc to test.txt”,“ add def to test.txt”,“ add ghi to test.txt”

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

 

 结合场景四Git Rebase,

在场景三团队项目工作流程中增加一步Git Rebase,即在branch1分支上完成自己的工作之后,为了让 log 记录将来更容易回顾参考,用 git rebase 重新整理一下提交记录。

  • git rebase -i  [startpoint]  [endpoint] 
  • git checkout master
  • git pull
  • git merge --no-ff mybranch
  • git push

 

 

 

 

 

 

 

 

练习题

 

在Github.com或Gitee.com上新建一个版本库,并实现如下 commit 网络结点示意图,要求 A 和 B 在本地存在过,但并不出现在远程网络图中

 

 解:

用git clone 指令从远程库克隆到本地库

 用git checkout 指令创建分支branch2

 在maser分支上提交3次修改“add k to test.txt” “add m to test.txt" "add n to test.txt"

切换到branch上分支上提交3次修改“add A to test.txt” “add B to test.txt" "add C to test.txt",用git log 展示提交记录如下图:

 

  用git  rebase -i  HEAD~3指令弹出交互式界面来完成A,B,C提交点的合并如下图所示

 

 

 用下述四条指令切换回master分支,将远程origin/master同步最新到本地存储库,再合并branch2到master分支,推送到远程origin/master

  • git checkout master
  • git pull
  • git merge --no-ff mybranch
  • git push

 

 

 

 

 合并时出现矛盾,编辑文件处理冲突,并提交解决冲突。

 

 远程库结果如图所示:

 

 

 

 

 

posted @ 2020-10-19 21:46  萤火虫06  阅读(263)  评论(0)    收藏  举报