GIT 安装和使用
GIT 安装和使用
一、GIT 介绍
-
Git是一个免费的开源 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有事务。
-
GIT 下载页面 https://git-scm.com/downloads
-
GIT 工作流程
- Workspace(工作区):就是电脑里看到的目录。
- Stage/Index(暂存区):一般存放在 ".git目录下" 下的index文件中。
- Repository(本次仓库/版本库):工作区有一个隐藏目录.git
- Remote(远程仓库):Github 或者是公司内部搭的服务器
二、GIT 安装
-
下载完成后,选择安装路径,进行安装,我是用的是Git 2.23.0
-
选择组件
-
选择默认编辑器
-
选择命令行工具
-
选择客户端
-
选择安全连接方式
-
检出和提交换行格式
-
默认终端
-
其它选项
-
实验性功能
-
安装成功
三、GIT 使用
1. 配置
- 检查是否安装成功。在桌面右击Git Bash Here,出现终端,输入命令
git --version
查看版本号。 - Git 配置文件
- ``/etc/gitconfig
文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有
--system选项的
git config` 时,它会从此文件读写配置变量。 ~/.gitconfig
或~/.config/git/config
文件:只针对当前用户。 可以传递--global
选项让 Git 读写此文件。- 当前使用仓库的 Git 目录中的
config
文件(就是.git/config
):针对该仓库。 - 每一个级别覆盖上一级别的配置,所以
.git/config
的配置变量会覆盖/etc/gitconfig
中的配置变量。 - 在 Windows 系统中,Git 会查找
$HOME
目录下(一般情况下是C:\Users\$USER
)的.gitconfig
文件。 Git 同样也会寻找/etc/gitconfig
文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。
- ``/etc/gitconfig
- 配置用户名和邮箱
- 设置用户名:
git config --global user.name "abc"
- 设置邮箱:
git config --global user.email "xxx@xx.com"
- 查看用户名:
git config user.name
- 查看邮箱:
git config user.email
- 设置用户名:
- 查看当前配置信息
git config --list
- 使用帮助信息
git help 命令
2. 创建版本库
-
版本库又名仓库,英文名repository,这是一个目录,目录里的文件被Git 管理。所以创建一个版本库只需要在一个空目录里使用 命令即可。
git init
但是要注意,git 只能跟踪文本文件的改动,避免出现编码问题,所有文本最好使用标准的 无BOm 的UTF-8 编码。
-
添加文件到git 仓库
- 先任意编辑一个文本文档。比如一个readme.txt,随意填写一些内容。
# 首先将文件添加到 sage git add readme.txt # 提交到 Repository 的当前分支,我们创建 git版本库的时候,会自动创建一个master 分支。 git commit -m "My first submission." # 查看还有那些文件没有提交 git status # 修改readme.txt 文件,可以使用 git status 查看是否有修改。查看workspace 与 Repository,当stage 不是空,对比的是 workspace 和 stage 的差异。 git diff readme.txt # 显示摘要而非整个 diff git diff --stat # 查看 Repository 和 stage 的差异。 git diff --cached readme.txt git diff --staged # 查看 Repository 和 workspace 的差异 git diff HEAD -- readme.txt # 然后再使用以上几步,进行提交
-
版本回退
# 查看历史记录,记录会按时间顺序逆序展示 git log # 如果感觉输出信息太多,可以使用参数 git log --pretty=oneline # HEAD 表示当前版本,id 就是那个很长度字符串。上个版本就是 HEAD^,上上个就是 HEAD^^。以此类推,如果比较多,可以使用 HEAD~100 git reset --hard HEAD^ # 如果要想恢复,需要使用 id,每个人的都不一样,id 不用写完,但是要和已有的不冲突 git reset --hard fb110 # 如果回退后,希望恢复,但是忘记id了,可以查看命令记录,有相应的id号。顺序也是按照时间逆序 git reflog # 撤销workspace的修改,将Repository的最近文件覆盖workspace。没有--,就变成了“切换到另一个分支”的命令 git checkout -- readme.txt # 撤销 stage 的修改。使用已提交到Repository的最近文件覆盖stage git reset HEAD -- readme.txt # 如果已提交到Repository,则需要使用版本回退 git reset --hard HEAD^ # 自己错删文件,需要恢复 git checkout -- test.txt # 确定要删除库中的文件 git rm test.txt git commit -m "remove test.txt"
每次提交的信息以时间逆序排列,HEAD 就是最新记录的指针,可以快速的找到需要的记录。
3. 远程仓库
-
创建SSH Key
ssh-keygen -t rsa -C "xxx@xx.com"
-
将用户目录下的.ssh 目录下的公钥内容复制到 https://github.com/settings/keys 中即可,title 任意。
-
由于现在是 Remote 上的仓库是空的,所以 Repository 连接 Remote
# 将 Repository 与 Remote 相连。添加后,远程库的名字就是origin,这是Git默认的名称。 git remote add origin git@github.com:username/repositoryname.git # 现象 remote 复制到本地 git clone git@github.com:JackingQueen/FirestTest.git # 将 Repository 的当前分支 master 推送到 origin git push -u origin master
4. 分支管理
-
创建与合并分支
# 创建other1分支 git branch other1 # 切换other1分支 git checkout other1 # 快速创建并切换分支,相当于上面两个命令 git checkout -b other1 # 创建并切换分支也可以使用 git switch -c other1 # 查看当前分支 git branch # 合并other1分支到当前分支,这次合并是“快进模式(Fast-forward)”,不是每次合并都能Fast-forward git merge other1 # 切换回 master git checkout master # 切换回已有分支也可以使用 git switch master # 删除 other1分支 git branch -d other1
-
解决冲突
# 以上是在当前分支要超过合并分支的时候,可以使用快进模式,但是如果两个分支对同一文件进行了不一样的操作,就会出现冲突 git switch -c other2 # 加入新内容 123456789 vi test.txt git add test.txt git commit -m "o2 commit" git switch master # 加入新内容 123abc vi test.txt git add test.txt git commit -m "master commit" # 此时将other2 合并到 master将出现冲突,合并失败 git merge other2 # 使用命令查看冲突文件 git status # 活着使用 git log 来看 git log --graph --pretty=oneline --abbrev-commit # 查看合并文件冲突的地方,手动解决完冲突后在提交 git add test.txt git commit -m "test merge" # 删除 other2 分支 git branch -d other2 # 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。 # 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。 git merge --no-ff -m "merge with no-ff" dev
-
bug 分支 和 Feature 分支
#####bug 分支##### # 当前工作正执行到一半,但是突然有新的 bug 需要修复,可以先使用 stash 将现场储藏起来,等到以后恢复现场继续工作 git stash # 查看刚刚的工作现场 git stash list # 第一种:恢复后,stash内容并不删除 git stash apply # 需要使用命令来删除 git stash drop # 第二种:恢复的同时把stash内容也删了 git stash pop # 再次查看,就看不到什么内容了 git stash list # 将某个提交 复制到当前分支,需要使用这次提交的 id。比如 把bug提交的修改“复制”到当前分支,避免重复劳动 git cherry-pick 4c805e2 #####Feature分支##### # 开发一个新feature,最好新建一个分支。如果要丢弃一个没有被合并过的分支 git branch -D dev
-
多人协作
# 查看远程库的信息 git remote # 显示更详细的信息 git remote -v # 推送分支 # bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug # feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。 # master分支是主分支,因此要时刻与远程同步 git push origin master # dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步 git push origin dev # clone时,只能看到本地的master分支 git remote add origin git@github.com:JackingQueen/FirestTest.git # 如果push 失败,就先抓取分支 git pull # 如果 pull 也失败,就设置dev和origin/dev的链接 git branch --set-upstream-to=origin/dev dev # 最后在 pull ,然后 push # rebase操作可以把本地未push的分叉提交历史整理成直线 git rebase git log --graph --pretty=oneline --abbrev-commit
5.标签管理
-
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动)。
# 创建标签 git tag v1.0 # 查看所有标签 git tag # 根据 commid 打标签 git tag v0.9 f52c633 # 查看标签信息 git show v0.9 # 可以携带参数。用-a指定标签名,-m指定说明文字。 git tag -a v0.1 -m "version 0.1 released" 1094adb # 删除本地标签 git tag -d v0.1 # 推送标签 git push origin v1.0 # 一次性推送全部尚未推送到远程的本地标签 git push origin --tags # 删除远程标签,先删本地,再删远程 git tag -d v0.9 git push origin :refs/tags/v0.9
6. 自定义
- 修改颜色:
git config --global color.ui true
- 忽略特殊文件:在Git工作区的根目录下创建一个特殊的
.gitignore
文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。.gitignore
文件本身要放到版本库里,并且可以对.gitignore
做版本管理! - 配置别名:
git config --global alias.st status