git - 简明操作指南

●'◡'● 帮助从未使用过Git的同学入门,木有高深内容 ●'◡'●

为什么要用Git:1、大部分程序员都在用。2、能正确使用全球最大的男性交友社区Github。
3、掌握这篇指南里面的Git内容,可以在简历里面多写句"熟练使用Git"。

新建了一个  git-test  项目,供大家测试使用。

安装

Windows 安装:下载链接 旋转合适的版本,下载完成之后,一路点next安装即可。

Mac 安装:下载链接 暂时无Mac测试,请自行百度安装。

Linux 安装:sudo apt install git Linux以Ubuntu 16.04为例。

安装完成之后,在控制台界面下输入git --version。若显示git version 2.x.x,则表示安装成功!

确认安装成功,使用命令git config --global user.email "youemail@juzix.io"设置一下你的邮箱,邮箱建议使用公司邮箱。
使用命令git config --global user.name "youname"设置一下你的用户名,用户名建议使用你名字全拼小写。

注意:以下命令执行,请不要在cmd进行操作,都在git bash下面执行。

生成密钥

        1、检查是否存在密钥:cd ~/.ssh && ls 如果有 id_rsa,id_rsa.pub 两个文件存在,那么已生成密钥。直接进入第3步。

        2、生成密钥:如果用第一步的方法检测到你的系统没有密钥。执行 ssh-keygen -t rsa -C "YouEamil@juzix.io",邮箱替换成自己的公司邮箱,然后一路按3个回车,密码为空。

        3、添加密钥到Gitlab:登入公司的Gitlab网页,在右上角点头像-->Settings-->SSH-Keys。将id_ras.pub里面的内容粘贴到Key输入框里面。Title随意填。

        密钥是可以添加多个的,你换电脑的时候,按照此方法重新生成一个再添加到Gitlab即可。

      点击查看操作

创建新仓库

        创建新文件夹,打开,然后执行:git init以创建新的 git 仓库。
        当然,这样创建的新项目后期推送到远程端的时候,还需要add remote。为了省事,所以建议在Gitlab页面上相应的位置直接创建项目,然后clone下来。

克隆代码

        进入Gitlab上面你需要克隆的项目,复制该项目的SSH的url,执行类似如下命令: git clone git@192.168.9.66:luchenqun/git-test.git

        克隆下来的项目,请不要进行目录的嵌套。否则,外面的项目会对里面的项目进行版本管理。

        点击查看操作

工作流

        你的本地仓库由 git 维护的三棵"树"组成。第一个是你的工作目录,它持有实际文件;
        第二个是暂存区(Index),它像个缓存区域,临时保存你的改动;
        最后是HEAD,它指向你最后一次提交的结果。

添加和提交

        你可以提交所有的更改到暂存区,使用如下命令:git add -A
        使用如下命令以实际提交改动:git commit -m "你的一些修改说明"
        现在,你的改动已经提交到了HEAD,但是还没到你的远端仓库。
        当然,在执行git add -A之前,建议使用git status查看更改的文件,git diff可查看更改的内容。

        点击查看操作

推送改动到服务器

        你的改动现在已经在本地仓库的HEAD中了。
        执行如下命令以将这些改动提交到远端仓库:git push origin master
        可以把master换成你想要推送的任何分支。
        不过,一般使用git push即可,它默认推送当前分支到服务器。
        当然,如果服务器上有比你本地更新的代码,那么推送就会失败,你必须先执行命令git pull合并服务器上代码才能进行推送。

        点击查看操作

更新与合并

        要更新你的本地仓库至最新改动,执行:git pull
        以在你的工作目录中获取(fetch)合并(merge)远端的改动。
        要合并其他分支到你的当前分支(例如 master),执行:git merge orgin/<branch>
        在这两种情况下,git 都会尝试去自动合并改动。但是,这可能并非每次都成功,并可能出现冲突(conflicts),解决冲突是Git里面的难点,自己亲手解决几次冲突就熟练了。
        这时候就需要你手动修改这些文件来手动合并这些冲突(conflicts)。         
        改完之后,你需要执行如下命令以将它们标记为合并成功:git add <filename>
        在合并改动之前,你可以使用如下命令预览差异:git diff <source_branch> <target_branch>

        点击查看pull操作

        点击查看merge操作

分支

        分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是"默认的"分支。在其他分支上进行开发,完成后再将它们合并到主分支上。假设我们以已存在的develop为开发分支为例。你现在想要开发一个新功能,想以develop分支为基础,创建一个叫做"feature_x"的分支。大概需要进行如下几步:

        1、切换到develop分支: git checkout develop当然,如果本身就在develop分支,就没必要执行该操作。
        2、创建并切换到新分支: git checkout -b feature_x这样,一个新的分支就创建了。
        经过一段时间的开发,你开发的功能已经稳定觉得可以合并到develop分支了。则大概进行如下操作:
        1、切换回develop开发分支:git checkout develop
        2、将分支feature_x的功能合并到develop分支:git merge orgin feature_x
        3、再把新建的分支删掉:git branch -d feature_x当然,你不删也是没啥问题的。
        需要说明的是,除非你将分支推送到远端仓库,不然该分支只存在于你的机器上面。
        你可以这样,将你的开发分支推送到服务器上:git push origin feature_x;

        点击查看操作

标签

        释放版本的时候你可以执行如下命令创建一个叫做 v1.0.0的标签:git tag -a v1.0.0 -m "完成基本功能,释放版本v1.0.0" 1b2e1d63ff
        其中1b2e1d63ff是你想要标记的提交 ID 的前 10 位字符。可以使用下列命令获取提交 ID:git log
        当然,你也可以使用少一点的提交 ID 前几位,只要它的指向具有唯一性。
        推送分支到服务器,用git push origin v1.0.0即可。

        点击查看操作

查看提交日志

        如果你想了解本地仓库的历史记录,最简单的命令就是使用: git log
        你可以添加一些参数来修改他的输出,从而得到自己想要的结果。
        比如只看某一个人lcq的提交记录:git log --author=lcq
        这些只是你可以使用的参数中很小的一部分。更多的信息,参考:git log --help

替换本地改动

        假如你操作失误或其他原因,你可以使用如下命令替换掉本地改动: git checkout -- <filename>此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到暂存区的改动以及新文件都不会受到影响。记得加--,否则有可能切换到某个分支去了!

        基于checkout的作用,我们还可以把他用到解决当合并发生冲突的时候。比如合并完成之后,文件filenameA与filenameB均发生了冲突。但是你确定fileNameA我需要用我自己的最新的,这时候你可以执行git checkout --ours <filenameA>,如果确定文件filenameB使用别人的,那么执行git checkout --theirs <filenameA>即可!

        假如你想丢弃你在本地的master分支所有改动与提交,此种情况也是有可能的,比如你前天晚上在家里对master分支写了一些代码,但是没有提交到服务器。你第二天到公司继续做然后提交到服务器,晚上回家你只想用服务器上最新的代码即可。你可以使用如下两个命令获取服务器上最新的版本历史,并将你本地主分支指向它: git fetch git reset --hard origin/master

其他常用功能简介

        1、可以使用 .gitignore 文件配置不需要加入版本管理的文件,比如Visual Studio编译C++生成的*.obj文件。放心,不要你去写,有人专门写了一些这样的模板文件。详见链接Gitignore

        2、Git去将来。我们可以使用git log查看我提交的日志。然后使用git reset --hard <commitId>回退到你之前代码提交的状态。这个时候,你想从当前的状态"穿越"到前面的状态去,你使用git log是无法查看到"未来"的commitId的。此时,你可以使用git reflog命令,它将你所有的操作都记录下来了。

        3、Git暂存更改。假设有这种情况。我在我的feature_x分支上做我的开发,这个时候,我需要切换到develop分支查看某些代码。但是我在feature_x分支上有改动,因为你没有git commit存到HEAD区,这个时候切换分支会造成你的改动全部丢失,所以Git是不允许你这么做的,但是我又不想做git commit操作。你可以使用git stash将本地更改暂存起来,然后切换到develop分支,回到feature_x分支再使用git stash pop将暂存的文件弹出来即可。

        3、找出"罪魁祸首"。当事情出错时,先去指责别人是人类的天性之一。如果你的产品出问题了,使用git blame <filename>命令可以很容易找出罪魁祸首。这个命令可以将文件中的每一行的作者、最新的变更提交和提交时间展示出来。

链接与资源

        1、Pro Git(中文版)有部分Git底层一些原理。

        2、Git版本控制管理(第2版)。一本讲关于Git的书籍,想深入了解Git的可以考虑一下。

        3、git - 简明指南。上面的指南80%内容来自该指南,我只添加了一些觉得我工作常用的以及做了一些排版。