Git使用教程
1 介绍
本教程简单介绍了GitGUI
、GitBash
、TortoiseGit
使用HTTP
方式克隆/推送版本库以及SSH
添加密钥的方法。
本教程使用的图片部分来自菜鸟教程、廖雪峰的官方网站以及阮一峰日志。
2 基本概念
- 工作区
电脑里能看到的目录。 - 暂存区
存放于隐藏文件夹.git
中的index
文件,也叫作索引区。 - 版本库
隐藏文件夹.git
,.git
不属于工作区,而是Git
的版本库。
3 分布式工作流程
3.1 集成管理者工作流
有一个主仓库和若干个公开仓库,每个开发者需要先从主仓库克隆出自己的公开仓库,然后将自己的修改推送上去,然后可以请求主仓库的管理者拉取更新并合并到主仓库,流程如下:
- 开发者派生主仓库,此时开发者有自己的远程仓库。
- 克隆自己的仓库到本地,做出修改并推送。
- 请求拉取自己的更新。
- 管理者在自己的本地仓库中,将开发者仓库加为远程仓库并合并修改。
- 管理者将合并后的修改推送到主仓库。
3.2 分支开发工作流
只有一个中心仓库,但是有很多分支。只在主分支上保留完全稳定的代码,还可以有一些类似develop或者next的平行分支,可以用来做后续开发或者测试功能稳定性,等这些分支一旦达到稳定状态,就可以合并到主分支了。
3.2.1 创建与合并分支的概念
在Git
中,你的每一次提交都被Git
串成一条时间线,一般来说,这条时间线就是主分支master
,Git
用HEAD
指向你当前工作在哪个分支,再用master
指向你的当前提交版本,这样就可以确定你的当前分支以及当前分支的提交版本,每次提交master
就会向前移动,指向当前提交版本。
当创建一个新分支dev
时,其实是新建了一个dev
指针,指向master
相同的提交,要切换到dev
分支就只需要将HEAD
指针指向dev
就行。
从现在起,你对工作区的修改和提交都是针对dev
分支,每次提交,都是由dev
指针向前移动,指向当前的提交版本。
如果要合并,只需要将master
指向dev
的当前提交版本就可以了,合并完可以删除dev
指针,这样就只剩一条主分支。
当Git
无法自动合并分支时,会提示冲突,此时必须首先解决冲突,将合并失败的文件内容编辑为希望的内容,然后再提交,最后合并完成。
4 使用方法
4.1 Git Bash
Git Bash
是通过命令行终端进行项目开发,GitGUI
和TortoiseGit
的本质就是用图形化界面对这些命令进行了封装,有些时候还是得通过命令行的方式进行操作。
4.1.1 命令清单
一般来说,日常使用只需要以下6个命令:
- 新建版本库
# 在当前目录下新建一个Git版本库
git init
# 将指定目录其初始化为Git版本库
git init [project_directory]
# 克隆一个Git版本库
git clone [url]
- Git配置
# 查看当前Git配置信息
git config -l
# 配置Git用户信息
git config --global user.email "E-mail_Address"
git config --global user.name "User_Name"
# 忽略特殊文件,需要编写.gitnore文件,并放入版本库
# 忽略原则
# 1.忽略操作系统自动生成的文件,比如缩略图
# 2.忽略编译产生的中间文件、可执行文件等
# 3.忽略存放有敏感信息的个人配置文件
# 检查gitnore配置文件的问题
git check-ignore
- 增删文件
# 将指定文件添加到暂存区
git add [file1] [file2] ...
# 将指定目录添加到暂存区,包括子目录
git add [directory]
# 将当前目录下所有文件添加到暂存区
git add .
# 删除工作区文件,并将此次删除放入暂存区
git rm [file1] [file2] ...
- 提交代码
# 提交暂存区到版本库
git commit -m [commit_message]
# 提交暂存区的指定文件到暂存区
git commit [file1] [file2] ... -m [commit_message]
- 分支
# 查看所有本地分支
git branch
# 查看所有远程分支
git branch -r
# 新建一个分支,但仍处于当前分支
git branch [branch_name]
# 新建分支并切换到新分支
git checkout -b [branch_name]
# 切换到指定分支
git checkout [branch_name]
# 删除指定分支(使用-D来强制删除一个未被合并的分支)
git branch -d [branch_name]
- 标签
# 查看所有标签
git tag
# 为当前提交的版本创建标签
git tag [tag_name]
# 为指定版本创建标签
git tag [tag_name] [commit_id]
# 为指定版本创建带有说明的标签
git tag -a [tag_name] -m "tag_description" [commit_id]
# 推送本地标签到远程
git push [remote_name] [tag_name]
# 推送所有未推送的本地标签
git push [remote_name] --tags
# 删除一个指定的远程标签
git push [remote_name] :refs/tags/[tag_name]
# 删除本地标签
git tag -d [tag_name]
- 查看信息
# 查看所有变更文件
git status
# 查看当前分支的版本历史
git log
# 查看命令历史
git reflog
# 查看暂存区和工作区差异
git diff
# 查看任意两个版本之间的改动
git diff [commit_id1] [commit_id2]
# 查看任意两个版本的src文件夹的差异
git diff [commit_id1] [commit_id2] src
# 查看远程仓库信息,显示可以拉取和推送的地址,如果没有推送权限就看不到推送地址
git remote -v
- 远程同步
# 关联一个远程仓库
git remote add [remote_name] [url]
# 下载远程仓库所有变动(到版本库),可以先查看远程仓库的变动再选择是否合并到本地
git fetch [remote_name]
git log -p FETCH_HEAD
git merge [remote_name]/master
# 拉取指定远程分支的变化并与指定的本地分支合并(不推荐)
git pull [remote_name] [remote_branch]:[local_branch]
# 推送本地指定分支到远程仓库
git push [remote_name] [branch_name]
# 强行推送当前分支到远程仓库,即使有冲突
git push [remote_name] -f
- 撤销
# 丢弃工作区文件的修改(文件还未添加到暂存区)
git checkout -- [file]
# 丢弃工作区文件的修改(文件已添加到暂存区),先撤销暂存区的修改再丢弃
git reset HEAD [file]
git checkout -- [file]
# 重置暂存区的指定文件,与上一次提交保持一致,但工作区不变
git reset [file]
# 重置暂存区和工作区,与上一次提交保持一致
git reset --hard
# 回退到指定版本
git reset --hard [commit_id]
- 发布版本
# 将master分支最新节点打包
git archive --format zip --output [release_name].zip master
4.2 Git GUI
安装Windows
版本的Git
时,会默认安装一个简单的GUI
工具,提供图形化界面。
4.2.1 Git GUI汉化
GitGui汉化项目
将汉化文件拷贝到Git
安装目录下的\mingw64\share\git-gui\lib\msgs
,lib
下没有msgs
文件夹则需要新建一个。
汉化后的GUI
界面如下所示:
4.2.2 Git GUI配置
点击编辑,选项,更改文件内容编码为UTF-8
:
4.2.3 Git GUI使用
4.2.3.1 克隆已有的远程仓库
- 单击右键
Git GUI Here
,克隆一个已有的远程仓库
- 缓存改动到暂存区,然后提交到版本库
- 上传到远程仓库(默认是
origin
)
- 从远程仓库获取变动
- 本地合并变动
4.2.3.2 本地上传新的版本库
- 创建新的版本库
- 上传本地版本库(可填写地址直接上传,无需去远程创建)
HTTP:http://192.168.3.179/[User_Name]/[Project_Name].git
SSH:git@192.168.3.179:[User_Name]/[Project_Name].git
4.3 TortoiseGit
4.3.1 HTTP方式克隆/推送版本库
4.3.1.1 GitLab及TortoiseGit配置说明
- GitLab设置中文
点击settings
:
选择preference
:
找到Localization
并修改Language
为简体中文:
- TortoiseGit设置
项目文件夹里单击右键选择TortoiseGit(T)
-->设置
点击编辑全局.git/config
,配置自己的信息,加入:
[credential]
helper = store
这是为了记住用户名和密码:
4.3.1.2 创建本地版本库
- 新建项目文件夹
- 在项目文件夹里单击右键选择
Git在这里创建版本库
4.3.1.3 创建远程仓库
4.3.1.4 绑定远程仓库并提交
- 克隆仓库地址(使用
HTTP
克隆)
- 单击右键选择
Git提交
(1) 填写日志信息,描述项目文件改动。
(2) 勾选未受版本控制的文件,即未提交的文件。
- 点击推送(
URL
为克隆的仓库地址)
4.3.1.5 新建分支与合并
新建一个分支相当于新建了一份备份,比如要添加新功能时,可以在新建的分支里进行测试,测试成功后再合并到主分支,新分支的修改不影响主分支。
- 创建分支并切换到新分支
- 创建
newFunction.txt
文件用于测试修改
- 提交修改并推送到新分支
v1.0.0
查看远端仓库可以发现,主分支没有变化,但是有新的分支可以合并:
注意:
合并新分支到主分支,一般是由项目管理者去合并分支,项目开发者克隆原始版本到本地后,可以新建分支进行开发测试,测试无误后可将此分支提交到远程仓库,由管理者审核后可合并到项目主分支。
4.3.2 SSH添加密钥
只有添加了密钥才能使用SSH URL
克隆仓库。
4.3.2.1 检查本机已存在的SSH
密钥
右键单击git bash here
,输入cd ~/.ssh
提示No such file or directory
说明是第一次使用。
4.3.2.2 创建SSH
密钥
ssh-keygen -t rsa -C "e-mail address"
持续三次回车,id_rsa
是私钥,id_rsa.pub
是公钥。
4.3.2.3 添加SSH
密钥
复制id_rsa.pub
内容粘贴到密钥文本框:
文章作者:GentleTK
原文链接:https://gentletk.gitee.io/Git使用教程