Git
Git分布式版本控制工具
基本命令
- clone(克隆):从远程仓库中克隆代码到本地仓库
- checkout(检出):从本地仓库中检出一个仓库分支然后进行修订
- add(添加):在提交前先将代码提交到暂存区
- commit(提交):提交到本地仓库。本地仓库中保存修改的各个历史版本
- fetch (抓取):从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
- pull(拉取):从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch+merge
- push(推送):修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库
- exit(退出): 退出git bash操作界面
Git安装和Git环境配置
下载与安装
git命令例子都是在Git Bash中演示的,会用到一些基本的linux命令,在此提前列举:
- Is/I 查看当前目录
- cat 查看文件内容
- touch 创建文件
下载地址: https://git-scm.com/download
Downloads:点击下载对应系统的版本,列如:Windows MacOS Linux/Unix
之后在跳转界面选中适用于 对应系统 的 Git 下载
例如windows选择下列版本:64-bit Git for Windows Setup
安装完.exe文件后,在电脑任意目录点击右键能看到如下两个菜单则说明安装成功:
Git GUI Here
Git Bash Here
Git GUI:Git提供的图形界面工具
Git Bash:Git提供的命令行工具
当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息
基本配置
- 打开Git Bash
- 设置用户信息
1
2git config --global user.name "Your Name"
git config --global user.email "mail@example.com" - 查看配置信息
1
2git config --global user.name
git config --global user.email
为常用指令配置别名(可选)
有些常用的指令参数非常多,每次都要输入好多参数,我们可以使用别名。
- 打开用户目录,创建.bashrc文件
部分windows系统不允许用户创建点号开头的文件,可以打开gitBash,执行如下命令1
touch ~/.bashrc
- 在.bashrc文件中输入如下内容:
1
2
3
4#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录所有文件及基本信息
aliasll='ls-al' - 打开gitBash,执行 source~/.bashrc
1
source~/.bashrc
解决GitBash乱码问题
- 打开GitBash执行下面命令
1
gitconfig--globalcore.quotepathfalse
- ${git_home}/etc/bash.bashrc 文件最后加入下面两行
1
2export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"获取本地仓库
要使用Git对我们的代码进行版本控制,首先需要获得本地仓库 - 在电脑的任意位置创建一个空目录(例如test)作为我们的本地Git仓库
- 进入这个目录中,点击右键打开Git bash窗口
- 执行命令git init
- 如果创建成功后可在文件夹下看到隐藏的.git目录。
1 | # 初始化本地仓库 |
基础操作指令
创建仓库
创建一个新的本地仓库 ( 省略project-name则在当前目录创建。 )1
git init <project-name>
克隆一个远程仓库。1
git clone <url>
添加和提交
添加一个文件到暂存区, 比如git add . 就表示添加所有文件到暂存区。1
git add <file>
提交所有暂存区的文件到本地仓库。1
git commit -m "message"
提交所有已修改的文件到本地仓库。1
git commit -am "message"
分支
查看所有本地分支, 当前分支前面会有一个星号*, -r查看远程分支, -a查看所有分支。1
git branch
创建一个新的分支。1
git branch <branch-name>
切换到指定分支, 并更新工作区。1
git checkout -b <branch-name>
删除一个已经合并的分支。1
git branch -d <branch-name>
删除一个分支, 不管是否合并。1
git checkout -D <branch-name>
给当前的提交打上标签, 通常用于版本发布。1
git tag <tag-name>
合并分支, —no-ff参数表示禁用Fast Forward模式, 合并后的历史有分支, 能看出曾
经做过合并, 而-ff参数表示使用FastForward模式, 合并后的历史会变成一条直线。1
git merge --no-ff -m message <branch-name>
合并&挤压 (squash) 所有提交到一个提交1
git squash <branch-name>
rebase 操作可以把本地未push的分叉提交历史整理成直线, 看起来更加直观。 但是, 如果多人协作时, 不要对已经推送到远程的分支执行rebase操作。
rebase不会产生新的提交, 而是把当前分支的每一个提交都 “复制”到目标分支上, 然后再把当前分支指向目标分支, 而merge会产生一个新的提交, 这个提交有两个分支的所有修改1
2git checkout <dev>
git rebase <main>
撤销和恢复
移动一个文件到新的位置。1
git mv <file> <new-file>
从工作区和暂存区删除一个文件, 并且将这次删除放入暂存区1
git rm <file>
从索引/暂存区中删除文件, 但是本地工作区文件还在, 只是不希望这个文件被版本控制。1
git rm --cached <file>
恢复一个文件到之前的版本1
git checkout <file> <commit-id>
创建一个新的提交, 用来撤销指定的提交, 后者的所有变化将被前者抵消, 并且应用到当前分支。1
git revert <commit-id>
重置当前分支的HEAD为之前的某个提交, 并且删除所有之后的提交。
—hard参数表示重置工作区和暂存区,
—soft参数表示重置暂存区,
—mixed参数表示重置工作区1
git reset --mixed <commit-id>
撤销暂存区的文件, 重新放回工作区 ( git add的反向操作)1
git restore --staged <file>
查看状态或差异
查看仓库状态, 列出还未提交的新的或修改的文件。1
git status
查看提交历史, —oneline表示简介模式1
git log --oneline
查看未暂存的文件更新了哪些部分。1
git diff
查看两个提交之间的差异。1
git diff <commit-id> <commit-id>
远程仓库
添加远程仓库。1
git remote add <remote-name> <remote-url>
查看远程仓库1
git remote -v
删除远程仓库。1
git remote rm <remote-name>
重命名远程仓库。1
git remote rename <old-name> <new-name>
从远程仓库拉取代码。 默认拉取远程仓库名origin的master或者main分支。1
git pull <remote-name> <branch-name>
将本地改动的代码rebase到远程仓库的最新代码上 ( 为了有一个干净、 线性的提交历史) 。1
git pull --rebase
推送代码到远程仓库 ( 然后再发起pull request) 。1
git push <remote-name> <branch-name>
获取所有远程分支。1
git fetch <remote-name>
查看远程分支。1
git branch -r
Fetch某一个特定的远程分支1
git fetch <remote-name> <branch-name>
GitFlow
GitFlow 是一种流程模型,用于在Git上管理软件开发项目。
主分支(master/main):代表了项目的稳定版本,每个提交到主分支的代码都应该是经过测试和审核的。
开发分支(develop):用于日常开发。所有的功能分支、发布分支和修补分支都应该从
开发分支派生出来。
功能分支(feature):用于开发单独的功能或者特性。每个功能分支都应该从开发分
支派生,并在开发完成后合并回开发分支。
发布分支(release):用于准备项目发布。发布分支应该从开发分支派生,并在准备好
发布版本后合并回主分支和开发分支。
热修复分支(hotfix):用于修复主分支上的紧急问题。热修复分支应该从主分支派
生,并在修复完成后,合并回主分支和开发分支。
main/master 默认主分支
origin 默认远程仓库
HEAD 指向当前分支的指针
HEAD^ 上一个版本
HEAD~ 上四个版本
git四个区域
工作区(Working Directory)-就是你在电脑里能实际看到的目录
- 创建的文件,修改了的文件都会被放入工作区
- 执行 git-log 查看日志(注:这是别名 原命令:git log —pretty=oneline —all —graph —abbrev-commit)
暂存区(Stage/Index)-暂存区也叫索引, 用来临时存放未提交的内容, 一般在.git目录下的index中。
- 工作区任务执行 git add . 后文件被放到暂存区
本地仓库(Repository)-Git在本地的版本库, 仓库信息存储在.git这个隐藏目录中。
- 暂存区任务执行 git commit -m “提交” 后文件被存放到本地仓库
- 远程仓库克隆到本地仓库执行 git pull 或 git fetch merge
远程仓库(Remote Repository)-托管在远程服务器上的仓库。 常用的有GitHub、 GitLab、 Gitee。
- 本地仓库的文件执行 git push 后提交到远程仓库