git的简要理解

为什么学习git

在科研的道路上我们会不可避免的接触到GitHub并会对它产生依赖。虽然说“代码搬运工”这个词并不好听,但是我仍觉得在GitHub上找寻开源的代码并在其基础上改进,对我们的科研进度会有大大的提升,所以我始终觉得这是个利大于弊的事。

但是Git的作用并不只是让大家分享自己的代码,它还是一个非常强力版本控制器。最近在用Latex撰写论文的时候,老师就让我用git来share我的latex文档。一开始我觉得这相当麻烦,明明有更方便的overleaf可以使用,完全没必要使用git,但是没办法,老师的话我哪敢不听。另一方面,之前在git上一直只使用过几个简单的命令,比如git clone之类的,更多的是直接在网页上点击按钮,学习使用git其实也是我一直想做但是懒得做的事情。

这篇文章也是为了记录、分享一下自己学习git的历程,希望大家不吝指教。
如果这篇文章有帮到你,可以收藏、关注、帮我点一下我的github的star

什么是Git

GitHub是一个基于git的代码托管平台,Git是目前世界上最先进的分布式版本控制系统。
要学习使用git,我们需要首先了解git的基本结构(参考——木子曰——史上最简单Git入门教程):github
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库

我的理解(可能不准确):
Remote理解为GitHub中托管的代码仓库
RepositoryIndex都可以理解为本地仓库,它们都保存在一个隐藏文件夹.git
workspace就是我们电脑直接可见的本地目录

简单、常用的Git命令

从github下载代码的操作流程:

如果我们需要下载他人的开源代码,可以直接复制Clone or download中的url,然后通过git clone url下载。对于我们自己的代码,如果我们需要下载其他contributor贡献的代码,我们可以通过git pull更新我们的代码。

上传代码至github的操作流程:

如果已有本地已有一个git clone得到的Repository,可以直接在对应的目录下,进行下面的操作:
1.通常在上传代码之前,我们需要先使用git pull确保他人的工作不会被我们覆盖。
2.我们平时本地的改动也就是workspace的改动,通过git add命令可以把本地改动存到Index
3.通过git commit -m "write some comment"命令可以把本地改动提交到Repository
4.最后我们就可以通过git push来更新我们在Remote中的代码。

如果没有Repository
1.通常我们可以在Github的网站上创建一个空的Repository,再通过git clone url把这个仓库克隆下来,然后把我们的代码复制到这个目录。再执行上述流程。
2.或者,我们可以通过git init来新建一个仓库,然后在Github的上创建一个空的Repository,通过git remote add origin url命令来将本地仓库与远程仓库Remote联系起来。再执行上述流程。

分支、合并、处理冲突

但是通常我们在多人合作的时候,不会直接用上述的流程:
比如A同学和B同学为了实现不同的功能,都在main.cpp中修改了代码,A同学先修改完代码,并上传了代码到Remote。过了一会儿B同学也改完了代码,git addgit commit不会受到影响,但是git push的时候就会提示冲突。

我们通常会使用git branch来解决这种多人合作容易出现的问题,这会使得我们的工作更加有条理。即A同学通过git branch A创建一个A分支,B同学通过git branch B创建一个B分支,两人在不同的分支同时进行改进,修改完成后再把两个分支合并master分支上。

一个简单的在新分支工作的流程:

# 创建新分支
git branch new_branch
git checkout new_branch

# woring....
working on new_branch......
# woring....

# 提交新分支上的代码
git add .
git commit -m "new_branch done"

# 把new_branch合并到master
git checkout master
git merge new_branch

有时候,在多人合作的时候我们会遇到冲突,git无法执行快速合并(上述操作流程就是一个快速合并),此时我们只需要手动解决冲突即可:(此处参考廖雪峰,可点击链接查看更完整的解释)
1.通过git status可以查看冲突的文件
2.查看冲突的文件,git会用<<<<<<<,=======,>>>>>>>标记出不同分支上的内容,方便我们查看。选择需要保留的代码,然后通过git addgit commit重新提交即可。

查看修改

另外我们经常使用git diff命令来查看修改。
1.git diff比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异。
2.git diff --staged查看已经暂存起来的文件(staged)和上次提交时的快照之间(HEAD)的差异
3.git diff HEAD·比较工作区与最新本地版本库的差异
4.git diff dev origin/dev比较本地分支dev和远程仓库的dev仓库的差异
更多git diff命令可以查看https://www.cnblogs.com/opensmarty/p/11044706.html

Pull Request

Pull Request 是什么?Pull Request 是一种通知机制。你修改了他人的代码,将你的修改通知原来的作者,希望他合并你的修改,这就是 Pull Request,本文将简称为PR。

在接触PR之前,我和别人交流代码都是通过截图的方法,然后把图片发到微信或者QQ,这样会使得聊天记录非常杂乱,他人很难高效的进行回复,而且很难再次找到这个截图。

PR非常适合contributors之间进行代码,使用也相对简单:
在这里插入图片描述
比如我们新建了一个分支,并且完成了相应的修改。我们希望把自己的修改合并到master分支上,就可以在新分支上点击按钮New pull request,这样就可以发起一个PR。
在这里插入图片描述然后我们将base选为我们希望合并的分支(通常是master),compare选择为我们的新分支new_branch,就可以完成create pull request。创建好一个PR后,所有在new_branch上的修改,都可以被看到,别人能够高效的对你的代码进行评论,你也可以高效的回复。

下图是PR的界面,比如我改了part/methodology.tex中的两行代码,就会在网页中显示diff,并且别人可以直接在改动处进行评论,帮助检查代码:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值