实用且简单的Git教程,轻松搞定多人开发

栏目: 编程工具 · 发布时间: 5年前

内容简介:俗说金三银四,大部分人都选择在这个时候找工作有拿完年终奖准备跳槽的,也有年前就辞职,已经休了一个长期年假的,还有刚走出校门的青涩少年们换了新工作,肯定要接触新项目,现在绝大多数项目都是使用Git进行版本控制
实用且简单的Git教程,轻松搞定多人开发

俗说金三银四,大部分人都选择在这个时候找工作

有拿完年终奖准备跳槽的,也有年前就辞职,已经休了一个长期年假的,还有刚走出校门的青涩少年们

换了新工作,肯定要接触新项目,现在绝大多数项目都是使用Git进行版本控制

这篇文章, 主要目的是在多人开发中让你能熟练使用Git

从实战出发,不大谈原理,只谈实际应用,省去大量的查找文档的时间

入职新公司,接触新项目,基本是不需要你自己搭建Git项目来托管code的,所以这里就不谈搭建了,只谈在开发实战时,如何使用Git

文末有总结,便于查阅

第一件事,肯定就是先安装Git了 官网下载Git比较麻烦,需要有梯子来帮助你,才能摸到它,这里直接给你一个Github上的镜像地址供你下载安装

github.com/waylau/git-…

若不会安装,请移步搜索引擎,搜索Git安装教程,本文不过多描述安装过程

第一次使用Git

安装好后,直接打开Git Bash,也就是Git 的控制台程序,就可以开始使用了

第一次使用Git,需要先配置自己的邮箱与名称

配置邮箱地址

git config --global user.email "NaoNao.@nao.com"
复制代码

配置用户名

git config --global user.name "NaoNao"
复制代码

配置完,Git不会给出任何提示,Unix的逻辑就是,没有提示就是最美的提示。

注意 git config 命令的 --global 参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

要想查看是否配置成功,依然是使用上述命令,把引号以及引号内的内容去掉即可。

拉取项目

配置好我们的个人信息后,自然也就需要拉取项目了

在磁盘中新建好存放项目的文件夹,进入文件夹点击鼠标右键,选择Git Bash即可

温馨提示:使用Git托管的项目,有两种地址,Https与SSH。 使用Https地址拉取,验证一次密码后,以后每次拉取/推送的时候不再需要验证密码。 使用SSH地址拉取的项目,每次拉取/推送的时候都需要密码验证。 各位读者自己抉择。

我的项目地址是 github.com/AdolphKevin…

git clone https://github.com/AdolphKevin/NaoNao.git
复制代码

将你的项目地址替换掉我的项目地址即可

分支管理

说分支管理之前,在此做个 背景说明 :一般在项目开发中会有2个主分支(master与develop) master分支上的内容是发布在 生产环境 运行的内容 develop分支是所有开发人员 开发完成 发布到测试环境的内容 其它各种feature分支都是各位开发人员在开发时拉取使用的分支

此文,也沿用此方式,各位读者按照自己实际情况判断

拉取下来后,我们要进行开发,肯定不能在master分支上开发,一般在项目上都会有各种分支

项目clone下来,首先就是查看分支了

git branch -r
复制代码

加上-r是代表查看远程仓库的分支,要是查看本地分支,只需要把-r去掉即可,-r是remote的简写

查看远程分支,所有的分支名前均会带有origin/ 的前缀,这个前缀代表着远程分支,拉取远程分支,填写远程分支名时不需要带上origin/

接到开发任务,我们需要从远程仓库上将我们需要开发的分支拉取到本地

git fetch origin x(远程分支名):y(本地分支名)
复制代码

使用上述代码,可以将远程分支拉取到本地,并创建本地分支

接着就是要将刚刚创建的本地分支与远程分支做关联了,做了关联之后,拉取更新与推送都不需要再指定分支名称

git branch --set-upstream-to=origin/x(远程分支名)  y(本地分支名)
复制代码

其中,x是你本地分支对应的远程分支;y是你当前的本地分支。

切换分支

做完关联后,咱们就需要切换分支,在特定的分支上去进行开发任务 先查看本地分支,找到我们需要开发的分支

git branch
复制代码

再切换到我们需要开发的分支上

git checkout y(分支名)
复制代码

提交内容

我们在自己的分支上按照需求完成了开发任务,接着就是将我们开发的内容提交到远程仓库了

虽然咱们所在的分支,除了自己之外,按理说是没人会在自己这个分支上再进行开发,所以推送前拉取更新也不很必要

但是为了避免不必要的麻烦,提交之前还是先拉取一下最新的数据

git pull
复制代码

获取了最新数据后,如果有别的同事动了咱们的分支,那肯定得先解决一下文件的冲突,若没有人动,那也就不用处理了

接着将我们添加/修改的文件提交到本地暂存区

git add xxx(文件名)
复制代码

xxx代表着文件名。当然,开发时咱们基本上很少只修改/添加一个单独的文件,当修改或添加了很多文件时,让我们一个一个文件的add,能把人给累死

所以Git也给出了批量add的方法,简单粗暴

git add -A
复制代码

-A是All的缩写,git add all 可以提交未跟踪、修改和删除文件。 .git add . 可以提交未跟踪和修改文件,但是不处理删除文件。

提交到暂存区后完成后就是将改动内容全部提交

git commit -m "提交到暂存区"
复制代码

引号内的文字,是此次提交内容的一个说明描述,以后看日志时也便于知道此次进行了什么内容的修改

提交完后就是将本次修改的内容推送至远程仓库

git push
复制代码

好了,到这里push的时候,坑来了~~~

如果是自己一个人的项目,此时如何push都没问题,但问题就出在,咱们是多人开发的项目,咱们的分支是需要与主分支合并(merge)。

别的同事的任务完成了,早已推送到我们将要合并的develop分支上了

所以我们在push之前需要进行code merge ,将develop分支上的内容merge到我们当前的feature分支上

代码合并

此时我们在feature分支上已经将修改内容commit了 需要将develop分支的内容合并到当前分支,先切换分支到develop上,再获取一次更新

git checkout develop
git pull
复制代码

这里切换到develop分支上获取更新时有个小坑,咱们暂且按照一切顺利来处理,后面再说一些常见的意外情况的处理。

获取完更新后,再切换到我们的feature分支上,将develop的内容合并到我们的feature分支上

git checkout feature
复制代码

合并某分支到当前分支

git merge develop
复制代码

解决冲突

执行merge后,如果有冲突,控制台会将有冲突的文件名展示出来,我们按照文件名找到对应文件,将冲突给解决掉后。

打开文件我们可以看到冲突的内容,例如:

<<<<<<<HEAD hello world feature ======= hello world develop >>>>>> develop

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容 <<<<<<<与=======之间的内容为 当前分支 的内容 =======与>>>>>>之间的内容为 develop分支 的内容(换句话说:就是需要 被合并的分支 内容)

将不需要保留的内容删除即可解决冲突

解决冲突后,我们再将当前的feature分支推送到远程仓库

git push
复制代码

执行完本命令行后,即可将本地分支内容推送至远程仓库

获取更新时的意外情况

前面说从feature分支切换到develop分支拉取更新时,会有个小坑,因为有时候Git会报错

Git pull - Please move or remove them before you can merge

这个错误是因为无论原始文件中.gitignore 文件的内容是什么,文件都被添加到远程存储库中。

由于文件存在于远程存储库中,因此git也必须将它们提取到本地工作树,因此会抱怨文件已经存在。

.gitignore 仅用于扫描新添加的文件,它与已添加的文件没有任何关系。

因此,解决方案是删除工作树中的文件并提取最新版本。或者长期解决方案是如果错误地添加了文件,则从存储库中删除文件。

这时我们在develop 分支上删除当前目录下没有被track过的文件和文件夹

git clean -d -f 
复制代码

现在重新获取更新即可

开发到一半,却需要切换分支

软件开发中,Bug就像家常便饭一样。有了Bug就需要修复,在Git中,由于分支是如此的强大,所以,在实战中,每个Bug都是通过一个新的临时分支来修复,修复后,将Bug分支合并到develop与master两个分支上,然后将临时分支删除

注意:将Bug分支合并到develop与master两个分支上,是在远程仓库完成。在本地,是需要将develop与master分支先获取最新,然后将这两分支分别合并在Bug分支上,解决冲突后直接推送Bug分支即可

可我们在feature分支上开发功能开发到一半,leader突然跑来告诉我们,生产环境出现了一个Bug,需要咱们紧急修复,咱们兴致勃勃的使用 git checkout Bug 命令,打算切换到Bug分支上去修复Bug

结果……Git却告诉我们,无法切换过去,因为我们目前所在分支没有提交……

可我们若要完成开发任务再去修复Bug,可能需要好几个小时甚至几天时间才能完成,而Bug修复却是紧急任务,这该如何是好呢?

问题不大,不慌。此时我们可以将当前分支开发的工作状态储藏下来,待我们解决了Bug,再恢复我们现在的状态

git stash
复制代码

执行完上述命令后,我们再来看看我们工作区是否干净

git status
复制代码

我们发现工作区非常干净,此时我们就可以顺利的执行 git checkout Bug 到Bug分支上去修改Bug了

咱们现在将Bug也解决了,也推送了,现在又回到feature分支继续咱们之前的任务了,切换回feature分支后,之前修改的内容也没有恢复啊!说好的储藏了工作状态呢?

咱们就来看看所有储藏的工作

git stash list
复制代码

使用上述命令,Git会将所有的储藏工作罗列出来,当我们想要恢复其中某一个储藏状态时,指定其名字就好了

git stash apply stash@{0}
复制代码

上述的stash@{0} 是当前分支储藏的工作名,各位读者根据自己的 git stash list 中的内容,自行替换

切换后,确认完当前状态无误了,就可以将之前保存的储藏删除

git stash drop stash@{0}
复制代码

觉得要执行两行命令比较麻烦?没关系,还有一次性解决问题的方法 切换后并自动删除

git stash pop stash@{0}
复制代码

不过我个人不大推荐这种方式,万一咱们恢复的储藏指定错了呢,要恢复起来还挺麻烦的。

版本回退

在开发时,总有需要回退到某个版本的时候,不然用版本控制系统干嘛?是吧

我们先来看看我们的历史版本

git log
复制代码

现在控制台输出了最近三次提交的日志信息,友情提示一下,按键盘Q可退出,按回车可查看更多的日志

要是嫌弃输出的内容过于冗杂,可以让Git显示个简单版

git log --pretty=oneline
复制代码

加上一个 --pretty=oneline 参数,就可以只看提交的ID了

现在我们可以根据当时commit时填写的描述信息,来判断哪一个ID是我们想要回退的版本

版本的回退,有两种常用的方式

回退到上一个版本

git reset --hard HEAD
复制代码

根据commit的ID,回退到指定版本

git reset --hard commit_id
复制代码

commit_id这个版本号没必要写全,只需要写6位以上就差不多了,Git能自己找到它,若存在前6位重复ID,那再多加几位就好了

版本的回退也非常的简单吧,Git的命令行操作写到这儿,也进入尾声了。上述的命令基本可以满足日常的使用

写在最后

Git命令行的操作,使用起来并不复杂,作为开发人员,要是没有深入了解Git的意愿,会用就行了,使用Git的要领就是大量使用分支 总结一下本文牵扯到的git操作 git config --global user.name 查看用户名或配置用户名

git config --global user.email 查看email或配置email

git clone 将远程仓库的项目克隆到本地

git branch 查看分支

git branch -r 查看远程分支

git branch <name> 创建分支

git fetch origin origin/remote_branch:your_branch 将远程分支下载到本地,并创建分支

git branch --set-upstream-to=origin/remote_branch your_branch 将本地分支与远程分支做关联

git pull 获取更新

git clean -d -f 删除当前目录下没有被track过的文件和文件夹

git merge <name> 将目标分支合并到当前分支

git add 将内容添加到暂存区

git commit 将添加的内容提交

git push 将本地提交内容推送到远程仓库

git checkout 切换分支

git branch -d <name> 删除分支

git stash 储藏当前分支所有内容

git stash list 查看当前分支储藏列表

git stash apply 恢复指定储藏内容

git stash drop 删除指定储藏内容

git stash pop 恢复并删除指定储藏内容

git status 显示工作目录和暂存区的状态

git log 显示commit的详细日志

git log --pretty=oneline 只显示commit的ID与描述

git reset --hard HEAD 回退到最近的一个版本

git reset --hard commit_id 根据commit_id回退到指定版本

实用且简单的Git教程,轻松搞定多人开发

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

电子商务:管理与社交网络视角(原书第7版)

电子商务:管理与社交网络视角(原书第7版)

(美)埃弗雷姆·特班(Efraim Turban)、戴维.金(David King)、李在奎、梁定澎、德博拉·特班(Deborrah Turban) / 时启亮、陈育君、占丽 / 机械工业出版社 / 2014-1-1 / 79.00元

本书对电子学习、电子政务、基于web的供应链、协同商务等专题进行了详细的介绍,全书涵盖丰富的资料以及个案,讨论了Web 2.0环境内的产业结构、竞争变化以及对当今社会的影响。另外,本书在消费者行为、协同商务、网络安全、网络交易及客户管理管理、电子商务策略等内容上都有最新的改编,提供读者最新颖的内容,贴近当代电子商务的现实。 本书适合高等院校电子商务及相关专业的本科生、研究生及MBA学员,也可......一起来看看 《电子商务:管理与社交网络视角(原书第7版)》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器