git
Git工作流程图

命令如下:
- clone(克隆): 从远程仓库中克隆代码到本地仓库
- checkout (检出):从本地仓库中检出一个仓库分支然后进行修订
- add(添加): 在提交前先将代码提交到暂存区
- commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本
- fetch (抓取) : 从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
- pull (拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于 fetch+merge
- push(推送) : 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库
Git安装
当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息
最好是你的github账号与邮箱
1 | git config --global user.name xxxx |
为常用指令配置别名(可选)
打开用户目录,创建 .bashrc 文件
在 .bashrc 文件中输入如下内容:
1
2
3
4#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录所有文件及基本信息
alias ll='ls -al'打开gitBash,执行 source ~/.bashrc
这个配置就是使用git-log代替git log –pretty=oneline –all –graph –abbrev-commit这一长串指令,方便我们后面查看日志
获取本地仓库
要使用Git对我们的代码进行版本控制,首先需要获得本地仓库
这里在电脑中找一个空目录作为我们的git仓库,在这个空目录中,我们右键打开Git bash窗口,执行git init。注意这里创建完是隐藏文件,需要打开隐藏文件可见才可以看到。
由于我们配置了ll=’ls -al’,所以在git bash中输入ll就可以看到全部文件,包括隐藏文件。
Git基础操作指令
Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git 的命令而发生变化。
简要说明: git add 工作区->暂存区 git commit 暂存区 -> 本地仓库
查看修改的状态(status):
- 作用:查看的修改的状态(暂存区、工作区)
- 命令形式:git status

添加工作区到暂存区(add):
- 作用:添加工作区一个或多个文件的修改到暂存区
- 命令形式:git add 单个文件名|通配符
- 将所有修改加入暂存区:git add .

提交暂存区到本地仓库(commit)
- 作用:提交暂存区内容到本地仓库的当前分支
- 命令形式:git commit -m ‘注释内容’

修改file01内容后,再次查看:
再次提交:

回退版本:git reset –hard +

回退版本再回去:git reset –hard +前面标识数字就可以。但是如果清屏了,没有提交记录了。也可以找回来:git reflog:记录了之前全部的操作
有些文件不需要git管理,我们希望add的时候不加入git仓库,可以创建一个.gitignore,里面内容可以是:
1 | # no .a files |
Git 分支
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离 开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
查看本地分支:git branch
常见本地分支:git branch + 分支名
切换分支:git checkout + 分支名
若切换的不存在,可以创建一个新的: git checkout -b + 分支名

我们在master上和dev01上分别提交一个文件:


可以看到git仓库中切换不同的分支,里面的内容也发生了变化。再用git-log看一下操作日志:可以看到这里在不同的分支中都记录了刚刚添加的文件。
合并分支:merge : 命令:git merge 分支名称 一般都是将其他的分支合并到master上。所以我们先切换到master,然后执行git merge+ 分支名
git merge后会出现一个vim进入文本编辑的地方,按ESC 进入命令模式,退出指令 是 “ :wq” ,合并后结果如下图所示。

注意,这里只是在master中合并了dev01,并没有删除dev01。还是可以切回dev01的分支的。(这里打错字母了创建了两个分支,不过问题不大)
删除分支:不能删除当前分支,只能删除其他分支
git branch -d 分支名 (删除分支时,需要做各种检查) git branch -D 分支名 (不做任何检查,强制删除)
解决冲突:
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解 决冲突,解决冲突步骤如下:
处理文件中冲突的地方
将解决完冲突的文件加入暂存区(add)
提交到仓库(commit)
示例:删除原来的分支dev01,在master基础上新建文件file02并新建分支dev02,修改file02中的内容,返回master中再修改file02内容,并在master中合并dev02(注意,这里分支修改都要commit才可以).

接下来需要自己修改cnt的值,然后git add . 再然后 git commit(直接提交即可)。最后master的file02中的值就是你最后修改的值。
补: 什么时候要使用git checkout -D xxxx 强制删除某个分支?当某个分支提交了某个文件,但是没有merge到master上,就会提示。强制删除即可。
Git 远程仓库
我们已经知道了Git中存在两种类型的仓库,即本地仓库和远程仓库。那么我们如何搭建Git远程仓库呢?
我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等。
gitHub( 地址:https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名gitHub 码云(地址: https://gitee.com/ )是国内的一个代码托管平台,由于服务器在国内,所以相比于 GitHub,码云速度会更快 GitLab (地址: https://about.gitlab.com/ )是一个用于仓库管理系统的开源项目,使用Git作 为代码管理工具,并在此基础上搭建起来的web服务,一般用于在企业、学校等内部网络搭建git私服。
配置SSH公钥
在用户目录(C:\Users\Administrator)下打开git bash。
输入:ssh-keygen -t rsa,不断回车。如果公钥已经存在,则自动覆盖
设置账户共公钥:可以在用户目录下生成的.ssh中的id_rsa.pub中复制,也可以通过cat ~/.ssh/id_rsa.pub打开
将这个公钥复制到gitee或者github安全设置中的ssh。
测试连接:ssh -T git@gitee.com / ssh -T git@github.com ,第一次会出现(github类似)
1 | This key is not known by any other names. |
上传码云(gitee):
首先要创建自己的码云仓库。创建后要确认是你本人连接仓库的,有多种认证方式。比较推荐的是通过ssh公钥连接远程仓库。
1 | git remote add gitee xxxxx // 添加gitee到本地列表 |
上传github:
第一次通过git bash访问github:
1 | The authenticity of host '[ssh.github.com]:443 ([20.205.243.160]:443)' can't be established. |
首先添加github仓库的SSH地址: git remote add github xxxxxxxxxx。
然后可以 git remote查看是否成功添加到本地列表中。
ssh -T git@github.com 大概率会出现:ssh: connect to host github.com port 22: Connection timed out。此时去C盘用户目录下的.ssh文件下创建一个不带后缀的文件:config,复制以下内容: 其中User为你登陆github的用户名邮箱
1 | Host github.com |
再次运行ssh -T git@github.com。输入yes即可。此时就连接到github的远端仓库了。 git push github master,在对应的仓库中就有本地仓库的文件了:
命令总结:
- git remote add <远端名称> <仓库路径>(从远端服务器获取此URL)
例如: git remote add origin git@gitee.com:czbk_zhang_meng/git_test.git - 查看远程仓库:git remote
- 推送到远程仓库:git push [-f] [–set-upstream] [远端名称 [本地分支名][:远端分支名] ]
- 如果远程分支名和本地分支名称相同,则可以只写本地分支
- 例如:git push origin master
- -f 表示强制覆盖
- –set-upstream 一般都是第一次push的时候添加这个。推送到远端的同时并且建立起和远端分支的关联关系。
- git push –set-upstream origin master
- 如果当前分支已经和远端分支关联,则可以省略分支名和远端名
- git push 将master分支推送到已关联的远端分支
- 如果远程分支名和本地分支名称相同,则可以只写本地分支
- 删除本地列表中的连接: git remote remove xxxx
克隆操作:git clone + 仓库连接
- 克隆的操作其实并不经常用。比如一次小的更新,完全没必要使用clone,我们可以使用push和pull指令
抓取指令:git fetch [remote name] [branch name]
- 抓取指令就是将仓库里的更新都抓取到本地,不会进行合并
- 如果不指定远端名称和分支名,则抓取所有分支
拉取 命令:git pull [remote name] [branch name]
- 拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
- 如果不指定远端名称和分支名,则抓取所有并更新当前分支


解决合并冲突:在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。 A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支。远程分支也是分支,所以合并时冲突的解决方式也和解决本地分支冲突相同相同。
IDEA中使用Git功能
在Idea中配置Git:
首先可以先在当前目录下添加.gitignore文件,因为不是所有的代码都需要上传。一些测试代码配置文件都不需要上传。我使用的比较简单,如下所示:
1 | .idea/ |
方式一:
可以在idea中登陆github账号,然后直接可以按照自己的目录直接建库上传。
方式二:
先在github上面创建库,然后获得ssh地址。在git,管理远程中自己添加即可

添加到本地仓库,对应的就是提交,上传到远程仓库,对应的就是推送。后续的修改,idea会给你标出来,重新提交,推送即可。

