git add remote_Git详解(一)

 在工作中,我们离不开git的使用,接下来我会带领大家去真正的认识和使用git。

01

什么是git

git是一个开源的分布式版本控制系统,并且它可以有效、高速的处理从很小到非常大的项目版本管理。(参考百度百科)

上面说到了分布式版本系统,那么延展出来的还有集中式版本系统,通常它的代表是cvs、svn。关于什么是集中式、什么是分布式,我在廖雪峰的官方网站上找了一篇通俗易懂的文章,下面放一个参考链接:

集中式vs分布式

https://www.liaoxuefeng.com/wiki/896043488029600/896202780297248

其实说了这么多,简单点:在工作开发时,git其实就是作为版本控制工具来完成团队之间的协作。

02

git的整体操作流程

关于git整体操作流程,里面主要涉及了四个关键部分:

  • workspace工作区:就是我们本地电脑写代码、存放项目文件的地方;

  • index/stage暂存区:需要注意的是当我们在使用git管理项目文件时,在我们本地项目文件中会多出一个隐藏.git文件夹,我们称这个隐藏的文件夹为版本库,通常是通过add提交指令来进行暂存的;

  • repository本地仓库:通常使用commit提交命令将暂存区中的文件添加到本地仓库中;

  • remote远程仓库:从字面意思来理解就是存放在远程git仓库上的,比如我们可以放在gitHub、gitLab等上面。

注意:上面提到隐藏.git文件夹,它里面包含了两部分:第一部分是一个暂存区;第二部分是git自动创建的master分支,并且它会将HEAD指针指向master分支。

关于上面说的四个关键部分,接下来看一张来自于网络上的图片对于这几点的整合:

8e7f403ffc536c298ae926f5bfc5f7aa.png

接下来再来看一个网络上更详细的流程图,这里是介绍了关于工作区到我们本地仓库的详细过程:

442bcbf61f11034eb6f03cd06d267938.png

可能看到这里你还是有点懵圈,但关于git的一些指令也没有太详细的了解过,没关系,接下来我会来解释以及演示git相关的工作中常用到的指令,当你看完之后再回过头来看看这幅图就会有了一个很好的理解。

03

工作中会用到的git指令

注意:在进入该演示过程时,我是默认你已经安装了git的,如果没有安装的话去git官网安装即可,在下面演示的过程中要的仓库是gitHub仓库。 接下来我会演示在工作中会用到的git指令,在这里出现的git指令有常用的、也有不常用的,对于不常用的我们也要有所了解,当哪天真的需要用的时候至少不会出现不知道这个指令的用法。 下面这些指令是工作中常见的指令,我会先列出来带大家熟悉相关的一些指令,然后在下一个章节中将不容易理解或者易出错的指令进行一个演示。
  • git的配置指令
(1)列出当前配置:git config --list; (2)第一次使用git时,我们需要配置一下用户的信息: 配置你的用户名:git config --global user.name "daipi173", 配置你的用户邮箱:git config --global user.emali "939628886@qq.com"
  • 新仓库的创建(工作区上的指令)
(1)在本地工作区中创建一个新的本地仓库:git init; (2)从远程git仓库复制项目:git clone [url] 注意:在这里url表示你远程仓库的地址,通常建议使用ssh来进行克隆,因为如果你使用https来进行克隆的话,那么当你push的时是需要验证用户名和密码的,而使用ssh是不要的,但是如果你要使用ssh的话是需要添加ssh key,否则是无法进行克隆的。关于如何添加ssh key,我在这里贴出一个gitHub官网的添加过程,里面有mac、windows以及linux的相关配置,链接如下:

新增 SSH 密钥到 GitHub 帐户

https://help.github.com/cn/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account
  • 提交(工作区上的指令)
(1)提交工作区中指定文件到暂存区:git add [file1] [file2] ...; (2)提交工作区中某个文件夹中所有文件到暂存区:git add [directory]; (3)提交工作区中所有文件到暂存区(通常使用该指令最多):git add .
  • 查询新信息(工作区上的指令)
(1)查询当前工作区所有文件的状态:git status; (2)比较工作区中当前文件和暂存区之间的差异,也就是修改之后还没有暂存的内容:git diff; (3)比较工作区中指定文件和暂存区上差异:git diff
  • 提交文件到版本库(暂存区上的指令)
(1)将暂存区中的文件提交到本地仓库中,也就是有了一个新的版本:git commit -m "写上你提交版本的信息"; (2)将所有已经使用git管理过的文件暂存后一并提交,也就是跳过add到暂存区的过程:git commit -a -m "写上你提交版本的信息"; (3)提交文件时,发现注释写错了或者文件有问题,是可以撤销上一次的提交的:git commit --amend
  • 查看信息(暂存区上的指令)

(1)查看这个项目commit提交历史,如果超出一屏则可以使用空格键来展示下一屏,或者按q退出:git log; (2)压缩每一个commit提交到一行:git log --oneline; (3)查看提交历史时,如果它后面添加参数-p表示提供的信息更加详细,并且它会将修改的内容也给展示出来了,用-n表示限制只展示最近n条commit历史,比如-3表示只显示最近的3次commit历史:git log -p -3; (4)比较暂存区与上一个版本的差别:git diff --cached
  • 本地仓库上的指令
(1)查看本地仓库关联的远程仓库(在clone完每个远程仓库之后,远程仓库默认的名字叫origin):git remote; (2)查看本地仓库关联的远程仓库,并且当加上-v的e参数后,会显示远程仓库的url地址:git remote -v; (3)添加远程仓库:git remote add [remote-name] [url],比如:git remote add first git://github.com/...; (4)从远程仓库中拉取本地仓库中没有的更新:git fetch [remote-name],比如:git fetch origin;(git fetch和git pull的区别:git fetch只是将远程的数据拉取到本地仓库,但是它并不会自动合并到当前工作分支中,只能人工进行合并;git pull不仅将远程的数据拉取到本地仓库,它还会将远程分支自动合并到本地仓库中的当前分支); (5)将本地仓库中某一个分支推送到远程仓库中:git push [remote-name] [branch-name],比如:git push origin master; (6)如果想将本地分支推送到远程仓库的不同名分支:git push [remote-name] [local-branch]:[remote-branch]; (7)如果想删除远程分支:git push [remote-name] :[remote-branch],你可以理解为:在这里省略了本地分支,相当于将空内容推送给远程分支,就等价于删除掉了远程分支; (8)查看远程仓库详细信息:git remote show [remote-name],比如:git remote show origin; (9)修改某个远程仓库在本地的名字:git remote rename [old-name] [new-name],比如:git remote rename origin new-origin; (10)移除远程仓库:git remote rm [remote-name]
  • 撤销(工作区上的指令)
(1)删除工作区文件,并且也从暂存区删除对应文件的记录:git rm  ; (2)从暂存区中删除文件,但是工作区依然还有该文件:git rm --cached ; (3)隐藏当前变更,以便能够切换分支:git stash; (4)查看当前所有的储藏:git stash list
  • 分支管理(暂存区上的指令)
(1)创建分支:git branch ,比如:git branch new-branch; (2)从当前所处的分支切换到其他分支:git checkout ,比如:git checkout other-branch; (3)新建并切换到新建的分支上(等价于上面1和2的一个结合):git checkout -b ; (4)删除分支:git branch -d ; (5)显示本地仓库中的所有分支:git branch; (6)查看哪些分支已经合并到当前分支:git branch --merged; (7)查看每一个分支的最后一次提交:git branch -v; (8)将远程分支合并到当前分支:git merge [remote-name]/[branch-name]

04

git中本地和远程分支的使用

  • 说一下git pull的完整格式:git pull [远程仓库名] [远程分支名]:[本地分支名]

举一个例子:git pull origin dev:dev表示拉取远程仓库origin中dev分支,与本地的dev分支进行merge合并; 如果你要是与本地的当前分支merge合并,那么冒号以及冒号后面的本地分支名可以不用写,比如:git pull origin dev; 注意:git会将本地库分支与远程分支之间建立一种追踪关系。举一个例子:在git clone的时候,所有本地分支默认与远程仓库的同名分支建立追踪关系。即本地master分支会自动追踪origin/master分支。 那么如果当前处于本地dev分支上,并且本地dev分支与远程的dev分支有追踪关系,那么远程的分支名可以省略,对于上面的写法可以简写为:git pull origin;
  • 在使用git时,比如需要将master、origin master和origin/master进行一个区分,对于它们三个的理解如下所示:

a. master是一件事情,代表本地的某个分支名; b. origin master是两件事情,origin代表远程名,master代表远程分支名; c. origin/master是一件事情,它是远程分支名,表示从远程拉取代码之后在本地建立的一份拷贝(也称为本地分支); 接下来举一个实际一点的例子: a. git fetch origin master表示从名为origin的远程上拉取名为master的分支到本地分支origin/master中(因为是拉取代码,所以需要同时指定远程名与分支名,当然就要分开写); b. git merge origin/master表示合并名为origin/master的分支到当前所在分支(因为是分支的合并,所以与远程名没有直接的关系,没有出现远程名,但是需要指定被合并的分支); c. git push origin master表示推送本地的master分支到远程origin上(因为是推送代码,所以涉及到远程名与分支名,当然就要分开写)。

05

git之多人协作开发使用步骤

工作中遇到多人协作开发是不可避免的,这个时候常常会遇到的问题就是冲突合并的问题,那么接下来我就给大家讲讲解决冲突的步骤: 首先需要声明的是,本地和远程仓库的版本不同,我在远程仓库中修改了两个版本,即本地仓库落后远程仓库两个版本,将index.html和second01.html两个文件都添加了一部分的内容,这个时候开发人员的本地需要拉取线上的代码并进行冲突合并。 (1)这个时候假设你把index.html和second01.html中的部分功能已经完成,然后你需要先进行一个git add .和git commit -m "..."的操作; (2)然后再拉取线上的内容:git pull --rebase,这个时候会看到冲突的部分,然后你就根据需求和你的合作伙伴先把冲突问题解决,然后执行git add .接着再执行git rebase --continue直到我们将冲突解决完成(如何查看自己冲突是否解决完?可以利用vscode工具下面的源代码管理,它的快捷键是ctrl+shift+G); (3)当你最后一次执行git rebase --continue时,它会跳入到vim界面,你只需要保存并退出即可; (4)提交到远程仓库即可:git push origin。

在看了这些基础的git指令之后,我会在明天发布git详解(二),接下来就是具体动手操作的过程,并且在工作中也会常常使用到。

特此声明参考链接,谢谢作者提供的文章

git基本操作,一篇文章就够了!

https://juejin.im/post/5ae072906fb9a07a9e4ce596
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值