新人入职 git 命令行使用指南
前言
话不多说,直奔主题。
git的主要作用,在于多人协作,这种协作的根本需求来源于早期程序员如何同步进度、合并代码、回溯版本、追踪bug。在这种生产需求下,其实产生了很多类型的代码管理工具。git能脱颖而出,自然是有他的优势。这其中,就是所谓大家耳熟能详的“分布式”。分布式其实就是指一份代码多端使用,多端存储。既可以是放在本地电脑,也可以存放在远程的某个服务器上。
在这里,必须提醒新人们注意,脑袋里要形成对git的最本质的认识。所谓git,是一个代码的版本管理工具,也就是历史记录工具。你每做一步阶段性的生产(比如新写一个组件、功能),就新建一个历史记录的时间线,在这条历史记录线上去写代码,把自己的所有修改都记录在这上面。git会记录你的每次修改,然后当你哪次不小心做了错误的修改或者寻找bug,你可以回退到相应的版本记录上。这些历史记录形成了一条条的记录线,可以合并在一起,形成一条完整的历史记录。
要使用git,就必须下载git软件,你可以直接搜索git官网进行下载。在这里不再赘述这些东西,你可以随便搜索一遍下载教程。安装过程中不要随便勾选什么选项,一路点击下一步就好。
git的结构
git在结构上分为本地仓库、暂存区和远程仓库。
本地仓库
所谓本地仓库,就是在你进行生产的电脑上的仓库,这个仓库你可以自己新建,也可以从远程仓库下载(一般是使用clone,后面会说)。当你下载了git并安装后,你会发现当你在电脑上右击时会显示出两个git相关的选项,其中有一个是“git bash here”,这将是我们后面的主角,也就是git命令行工具。
暂存区
所谓暂存区,是一个接收代码版本文件、修改记录的地方,如果你要将 !你的本地的代码版本提交到远程仓库!,就必须经过暂存区!你可以这样看待这三者的关系:本地仓库 - 暂存区 - 远程仓库。暂存区是一个中间代理人。
远程仓库
所谓远程仓库就是存放在服务器上的代码版本库,有很多存放代码的远程仓库网站,比如github,gitee。如果你要将本地仓库的代码推送到远程仓库,就必须在相关网站注册账号,然后新建仓库。如何新建远程仓库呢?
- 你可以先登录gitee网站去注册一个账号,点击里面的新建仓库
- 给仓库起个名字,尽量语义化
- 不要选择任何所谓开源协议
- 你可以选择公开或者私有,这取决于你
然后,你就新建了一个远程仓库,这时你就来到了一个新页面,上面有你的仓库地址、一些简单的命令行教程,还有很多奇奇怪怪的按钮,先别管那些,让我们接着往下来。
git命令初见面
1. git clone url
为了你能够快速掌握,希望你进行一些实战,一步一步来。git其实很简单,但简单的东西建立在实操的基础上。
还记得之前新建的远程仓库吗?点击上面的新建文件按钮,你可以新建一个名为“demo.txt”的文件。然后点开它,在上面打上第一行字:第一行测试文字。
然后,在你的电脑上任意你能找到的位置新建一个文件夹,并起个好听的名字。点开它,右击并选择“git bash here”,这时会弹出一个命令行。在上面使用我们要学的第一个命令:git clone <url> <repo>。
这里的url,是你的仓库地址,可以在仓库页面的右边看到。repo是仓库的英文缩写,也就是你的远程仓库名,不过一般可以省略。clone的意思是将你远程仓库的代码克隆到本地。切记,不要直接下载zip文件,这种方式不建议作为学习者的选择,你要做的就是敲命令行。
踩坑提醒:
一定要注意右击时所在文件夹的层级,不同的文件夹层级右击打开git bash here的效果是不一样的,当你想知道git bash here成功没有,可以看看命令行工具的右边有没有一个括号,里面显示分支名,一开始是master。这个没法在这里细说,读者可以自行点击试试,没有什么太大的问题,但是是新人很容易犯的错误。
2. git add fileName
还记得之前说的暂存区吗?这个命令的意思是说将我们做了修改的文件添加进暂存区。为什么要添加进暂存区?因为只有添加进暂存区的文件才能被推送到远程仓库。在这里,有两个git add的便捷命令,一个是 git add .,注意这个点号,这个命令意为将所有当前目录下的文件添加进暂存区。git add --all,这个命令意为将所有文件都添加进暂存区。
3. git commit -m "修改的说明"
这个命令用于说明你此次更改做了些什么,比如结构调整、样式调整、新增功能、修复bug等。每次推送代码到远程仓库之前,都要使用git add和git commit命令,否则推送(push)是不会成功的。
4. git push url branch
一般情况,你的代码在远程新建时只有master分支,这个分支顾名思义就是管理者分支,一般不会在上面进行开发的。而且公司里的代码,master分支拥有绝对的访问权限,一般人动不了。
记住branch这个单词,这个是分支的意思。这时,打开demo.txt文件,在里面的第二行输入:第二行的测试文字。然后执行git add和git commit命令。然后使用git push url branch命令将本地仓库推送到远程仓库。这里的url是远程仓库地址,branch是分支名,默认是master。
踩坑提醒:
本地仓库分支名与远程仓库分支名不同是push不了的。
5. git branch
该命令用于检查当前存在的分支
6. git branch 分支名
该命令用于新建一个分支
7. git checkout branch
该命令用于切换到目标分支
8. git checkout -d 分支名
该命令用于删除一个分支
9. git checkout -b 分支名
该命令在新建分支的同时切换到目标分支
10. git pull url 分支名
该命令形式上与push一样,但作用其实是不同的。pull意味拉,但本质不是拉代码,而是拉去远程仓库的历史记录,如果后面再跟上本地分支名,将会进行合并。
好了,至此你已经会一些基础的git命令了。但这仅仅是第一步。
合并分支
当不同的人开发完成后,或者自己在不同的分支上开发完成后,都需要对历史记录进行合并,原因在于历史记录的统一,利于巡查bug和减少分支等。分支存在太多会出现命名荒,及时删除不会有什么影响,但前提是已经合并过了。
git merge 分支名
合并分支,使用命令git merge,后面跟的分支是被合并分支。例如,我要将分支1合并到分支2,应该切换到分支1,使用命令git merge 分支2,这样,分支2就被合并到分支1了。如果是分支1合并到分支2,则要切换到分支2,再使用git merge 分支1。
例如,现在有一个分支master,自己有一个私人分支:feature-me。feature-me合并到master首先要切换到master分支,然后使用git merge feature-me。merge后面的分支是被合并分支。
还有一种合并分支的命令:git rebase,但这里不展开讲。
解决冲突
在git终端(git bash here)下打开之前clone下来的仓库。打开成功的话在文件信息后面会显示分支名。现在,我们需要新建两个分支issue1和issue2。你可以自己尝试新建一下。
新建完成后,使用命令切换到issue1分支,还记得切换命令吗?使用git checkout issue1即可。然后打开demo.txt文件,在其中的第三行录入:解决冲突issue1第三行。接着,使用git add与git commit命令对这次更改进行提交。
然后,再使用命令切换到issue2分支,打开demo.txt文件,在其中的第三行录入:解决冲突issue2第三行。接着,使用git add与git commit命令对这次更改进行提交。
接着,切换到master分支,使用git merge合并issue1,这个时候提示你合并成功。接着,合并issue2,继续使用git merge命令。但这时你会发现,界面提示你合并失败。
原因在于,要合并的两个分支,在同一行产生了修改,git没法自动解决,需要开发人员手动去解决这个冲突。打开demo.txt文件,你会发现git已经提示你冲突的位置。好,将那些无关的线条和git提示的符号删掉,既然是因为在同一行发生了修改才产生的冲突,那将这两行文字放置于不同的行不就好了吗?好,解决后可以再次尝试合并,系统显示合并成功!
好了,到这里你基本上已经入门了git,但这远远不够,公司有许多规范,你要记住的有很多。可以先做一些基本的实操,循序渐进地学习。下面是两个非常棒的git网站,建议收藏。