Git使用指南(高频命令详解)
从零开始助你高效使用git。关注不迷路哦~
一、Git是什么
Git是免费、开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理
- 分布式版本控制系统,就是远程仓库同步所有版本信息到本地的每个用户。用户在本地就可以查看所有的历史版本信息。当别的用户更改过项目时,用户可以远程更新一下,就能看到最新版的项目。
git四大工作区
- Workspace:你电脑本地看到的文件和目录,在Git的版本控制下,构成了工作区。
- Index/Stage:暂存区,一般存放在 .git目录下,即.git/index,它又叫待提交更新区,用于临时存放你未提交的改动。比如,你执行git add,这些改动就添加到这个区域啦。
- Repository:本地仓库,你执行git clone 地址,就是把远程仓库克隆到本地仓库。它是一个存放在本地的版本库,其中HEAD指向最新放入仓库的版本。当你执行git commit,文件改动就到本地仓库来了~
- Remote:远程仓库,就是类似github,码云等网站所提供的仓库,可以理解为远程数据交换的仓库~
git工作流程
- 从远程仓库拉取文件代码回来;
- 在工作目录,增删改查文件;
- 把改动的文件放入暂存区;
- 将暂存区的文件提交本地仓库;
- 将本地仓库的文件推送到远程仓库;
二、Git常用命令
下载安装git
https://git-scm.com/downloads
配置git:安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改
git config --global user.name "John Doe"
git config --global user.email "johndoe@example.com"
创建新仓库
1)创建新文件夹
2)在该文件夹下右键打开git bash here,然后执行git init以创建新的 git 仓库
3)到gitlab 或github网站上新建一个项目,复制SSH
4)使用如下命令将你的仓库连接到某个远程服务器:
git remote add origin <复制的SSH>
5)一般仓库都有README.md
touch README.md # 生成README
克隆远程版本库到本地
执行如下命令以创建一个本地仓库的克隆版本:
git clone /path/to/repository
如果是远端服务器上的仓库,你的命令会是这个样子:
git clone username@host:/path/to/repository
开发分支
git checkout -b dev # 创建开发分支dev,并切换到该分支下
git checkout dev # 创建开发分支dev,不切换
git checkout master # 回到主分支
git branch # 查看本地所有的分支
git branch -r # 查看所有远程的分支
git branch -a # 查看所有远程分支和本地分支
git branch -d dev # 把分支dev删掉
添加与提交
git add . # 添加当前目录的所有文件到暂存区
git add [dir] # 添加指定目录到暂存区,包括子目录
git add [file1] # 添加指定文件到暂存区
git commit -m "代码提交信息" #提交暂存区到仓库区
提交到仓库
git push -u origin <master> # master可以改为其他分支
git push origin <branch> #
查看提交历史/提交日志
git log # 查看提交历史
git log --oneline # 以精简模式显示查看提交历史
git log -p <file> # 查看指定文件的提交历史
更新本地仓库到最新改动
git pull # 拉取远程仓库所有分支更新并合并到本地分支
git pull origin master # 将远程master分支合并到当前本地分支
git pull origin master:master # 将远程master分支合并到当前本地master分支,冒号后面表示本地分支
git fetch --all # 拉取所有远端的最新代码
git fetch origin master # 拉取远程最新master分支代码
显示改动
git diff # 显示暂存区和工作区的差异
git diff filepath # filepath路径文件中,工作区与暂存区的比较差异
git diff HEAD filepath # 工作区与HEAD (当前工作分支)的比较差异
git diff <branchName> filepath # 当前分支的文件与branchName分支的文件的比较差异
git diff commitId filepath # 与某一次提交的比较差异
合并分支
我们在开发分支dev开发、测试完成在发布之前,我们一般需要把开发分支dev代码合并到master
git merge dev # 在当前分支(比如master)上合并dev分支过来
git merge --no-ff origin/dev # 在当前分支上合并远程分支dev
git merge --abort # 终止本次merge,并回到merge前的状态
解决冲突
- 查看冲突文件内容
- 确定冲突内容保留哪些部分,修改文件
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,<<<<<<<HEAD是指主分支修改的内容,>>>>>>> dev是指dev分支上修改的内容。我们确定到底保留哪个分支内容,还是两个分支内容都保留呢,然后再去修改文件冲突内容 - 修改完冲突文件,重新提交,done
撤销与回退
我们想将某个修改后的文件撤销到上一个版本,或者想撤销某次多余的提交,都要用到git的撤销和回退操作:
git checkout -- test.txt # 撤销test.txt的修改
cat test.txt # 查看内容
1)代码git add到暂存区,并未commit提交,可以酱紫回退:
git reset HEAD file # 取消暂存
git checkout file #撤销修改
2)代码已经git commit了,但是还没有push,可以回退:
git log # 获取到想要回退的commit_id
git reset --hard commit_id # 回到过去的commit_id
3)代码已经push到远程仓库:
git log
git reset --hard commit_id
git push origin HEAD --force
标签tag
在软件发布时创建标签,是被推荐的。可以执行如下命令以创建一个叫做 1.0.0 的标签:
git tag [tag] # 新建一个tag在当前commit
git tag [tag] [commit] # 新建一个tag在指定commit
git tag -d [tag] # 删除本地tag
git push origin [tag] # 推送tag到远程
git show [tag] # 查看tag
三、Git小技巧
周报
无论是实验室、公司还是Teamwork,周报都比较常见,在一个共享空间上上传每个人一周的工作成果,合并到一起形成完整的周报。那么如何实现周报功能呢?
- gitlab上创建项目(此处不再赘述)
- 下载或更新
(1)初次操作:
git clone -b master git@gitlab.com:zyh/xxx.git # 复制SSH
(2)非初次操作:
git checkout (master)
git pull
- 创建个人分支。此处注意名称不要有空格
git checkout -b 20201228_zyh # 创建个人分支20201228_zyh
-
在包含所有成员工作目录的.md中完成自己的部分。此处该文件是 20201228.md
-
修改,上传
git add 20201228.md
git commit -m 'your commit message'
# 方法一:直接合并到master分支上,无须批准
git push origin -u 20201228_zyh:master #将本地20201228_zyh分支合并到远程master分支,冒号后表示远程分支
## 方法二:合并到远程20201228_zyh,并申请合并批准,见步骤6、7
git push origin -u 20201228_zyh:20201228_zyh #将本地20201228_zyh分支合并到远程20201228_zyh分支,冒号后表示远程分支
- 申请merge
- 整合人合并所有分支到master
git pull
git checkout master
git merge branch1 branch2 branch3 # 一次性合并多个分支
加速下载
国内访问github下载速度很慢,当仓库内的文件较大时,clone或直接下载zip会非常费时且容易中断,造成前功尽弃。解决办法之一是使用国内的 Git 托管服务Gitee,它提供免费的 Git 仓库。
如果不想从gitee上下载,可以使用另一种镜像方法:
git clone .*?github.com.cnpmjs.org/(.*?)
四、Git家族
-
GitHub —— https://github.com/
GitHub 作为开源代码库,拥有超过 900 万的开发者用户,目前仍然是最火的开源项目托管平台, GitHub 同时提供公共仓库和私有仓库,但如果使用私有仓库,是需要付费的 -
**GitLab **—— https://gitlab.com/
GitLab 让开发团队对他们的代码仓库拥有更多的控制,相比较 GitHub , 它有不少特色:(1) 允许免费设置仓库权限;
(2) 允许用户选择分享一个 project 的部分代码;
(3) 允许用户设置 project 的获取权限,进一步提升安全性;
(4) 可以设置获取到团队整体的改进进度;
(5) 通过 innersourcing 让不在权限范围内的人访问不到该资源;
-
Gitee—— https://gitee.com/
国内的 Git 托管服务,提供免费的 Git 仓库,还集成了代码质量检测、项目演示等功能。对于团队协作开发,Gitee 还提供了项目管理、代码托管、文档管理的服务
五、 GitLab/Github配置SSH key
当前很多公司都选择git作为代码版本控制工具,然后自己公司搭建私有的gitlab来管理代码,我们在clone代码的时候可以选择http协议,当然我们亦可以选择ssh协议来拉取代码。但后者需要选择本地git客户端生成ssh key,然后配置在gitlab里,而后使用ssh协议进行提交和拉取git远程仓库的代码。下面就来一步一步教大家如何配置:
- 打开本地git bash,使用如下命令生成ssh公钥和私钥对:
ssh-keygen -t rsa -C 'xxx@xxx.com' # -C 后面是你注册gitlab的邮箱地址
- 一路回车
- 打开/.ssh/id_rsa.pub文件(表示用户目录,比如我的windows就是C:\Users\zyh),复制其中的内容
- 打开gitlab,找到Profile Settings-->SSH Keys--->Add SSH Key,并把上一步中复制的内容粘贴到Key所对应的文本框,在Title对应的文本框中给这个sshkey设置一个名字,点击Add key按钮
- 到此就完成了gitlab配置ssh key的所有步骤,我们就可以愉快的使用ssh协议进行代码的拉取以及提交等操作了

浙公网安备 33010602011771号