Git使用大全

Git

Git官网
Git常用命令及方法大全
-m含义从官网查看
git tag使用
比cv强的懒人工具. 分布式版本控制系统.

作用

管理代码

工具安装

Git下载

基本使用

疑点

何种工具可以清楚查看git的提交路线. (vscode的git插件)

注意

  1. 在master上pull 最新代码,切develop分支 //
    创建新分支,是基于master的时间点,所以要在master上pull最新代码更新本地仓库,再切develop分支,以最大减少冲突.
  2. 合并之前,也要先pull,减少冲突.
  3. 查看不到分支,对于刚初始化的仓库需要提交后才可查看

工作流

GitFlow工作流图解 *维护分支图

五个分支

master 分支 // 上线主分支 在gitlab上叫production
release 分支 // 测试
develop分支 // 开发
hotfix/xx 分支 // 修xxbug,打补丁
feature/xx 分支 // 分支名要体现功能的作用
最终保留 master和develop分支其余删除.

工作流图

Git使用大全_第1张图片
master v0.1版本,先拉取最新代码,基于master最新时间点,切出开发分支develop,然后再从develop分支切出功能分支feature/xx,去开发功能,然后安排另外一个同事去开发另外一个feature/xx, 都是从开发分支去创建功能分支.
此时线上有一个bug,所以从master分支切出hotfix分支去修复,修复完成,回到master分支进行faster-forward合并,合并后打一个新的标签v0.2版本,让线上可以正常运作. 因为开发分支依旧是v0.1存在该bug,所以要去到develop分支上去合并hotfix这个分支,以解决了bug,然后develop分支就到了v0.2的版本.然后feature的人员继续工作,做完后,但是此时feature分支是v0.1版本,而hotfix没有体现到.因为最下面的feature分支,是没有在v1.0的路线上,上面的feature分支是在的,然后上面的feature分支合并到develop分支就会出现冲突,因为有bug出来,然后合并冲突,合并后,从develop上切出release分支去做测试,测试该bug是否影响.测试完成后分别合并到 master和develop分支上,且master因为有了一个新功能,所以打上一个新的tag v1.0. 然后下面的feature就继续,做完合并就可以了.

操作

前提,安装好git bash、配置好SSH或使用公司的git.

初始化仓库

创建文件夹,进入到文件夹右键后点击Git Bash Here,看到下图 Git的窗口,如果字体小可以右键上面的路径栏,找到option的font调字体
通过pwd 确认是否在对的路径,使用ls -al查看所有文件,如果没有就可以使用git init命令初始化本地仓库,再通过ls -al就可以看到有 .git的文件,说明初始化成功.
Git使用大全_第2张图片

做用户配置

显示当前的Git配置

// 查看 user.name和user.email,为了方便以后工作交接
git config --list 

// 设置提交代码时的用户信息
git config --global user.name "[name]"你的名称(不用引号)
git config --global user.email "[email address]" 你的邮箱

//  作为默认设置
git config --global push.default simple

使用场景

正常开发与提交流程

// 如果没有仓库就需要git init,会看到master分支
$ git init 
// 取回远程仓库的变化,并与本地分支合并,如果是git fetch 需要手动合并
// 从master拉取最新代码,并与本地分支合并,pull会自动合并
$ git pull [remote] [branch]
// 从master创建并切到dev分支
$ git checkout -b develop 
// 从develop分支切除feature分支做功能开发,用英文描述
$ git checkout -b feature/addButton 
// 在feature分支上创建并编辑文件推送并提交文件
$ vi feature.txt
$ git add .git add -A 
$ git commit -m 'create new file feature.txt'

暂存区回退到工作区

// 查看工作区状态
git status

// 从master创建并切到dev分支
$ git checkout -b develop 

// 查看当前分支的文件
$ ls
 
// 创建并编辑文件,进入到linux界面编辑后 :wq保存出来.
 $ vi feature.txt

// 查看文件内容
$ cat feature.txt

// 查看工作区状态,会看到修改的文件
git stauts

// 推送到暂存区
$ git add <file1> <file2> // 多个文件 
$ git add .git add -A // 全部推送

// 突然要改,从暂存区撤会到工作区(会有提示)
$ git rm --cached feature.txt

// 如果不修改就提交到本地历史记录 -m 是备注
$ git commit -m 'create new file feature.txt'

// 再查看提交后的工作区状态,显示working tree clean
$ git status

正常合并分支(feature合并到develop)

// 一开始的master是 v0.1版本,打上tag
$ git tag -a v0.1 -m 'release 0.1'
// 以feature/xx分支为例子,此时feature/xx上有一个功能文件,已提交,而develop是没有的.
// 那么切换到develop后通过快速合并,将feature/addButton合并到develop分支.
$ git merge --no-ff feature/addButton 
// 合并后会出现vi界面显示合并成功 :q 即可
// 查看合并后的文件即可,合并成功后就不需要再提交了.
$ ls 

线上master修复bug

// 无论要改什么都要拉最新代码.
git pull remote master
// 基于master切出hotfix/xx分支
// 再hotfix/xx修改完成后,要分别合并到master和develop分支
// * 一定要提交后再去合并,如果中途修bug被叫去做别的.先提交备注合并.
// 要合并就切换到master
$ git checkout master
$ git merge --no-ff hotfix/button_invaild
// 还要合并一份到develop分支
$ git checkout develop
$ git merge --no-ff hotfix/button_invaild
// 合并完
// 因为feature/addButton也合并到了develop上.
// develop 也合并到了master上
// 然后就删除其他分支
$ git branch -d feature/addButton
$ git branch -d hotfix/button_invaild
// 查看分支,剩下master和develop分支.
$ git branch 

制造冲突

// 从master切到dev,从dev分支切到feature/add_scorll分支
$ git checkout -b develop
$ git checkout -b feature/add_scorll
// 再feature/add_scorll分支去添加推送提交
feature_scorll.txt
// 此时线上master有bug,切到master后切出hotfix/fixbug分支
$ git checkout master
$ git checkout -b hotfix/fixbug
// 同时修改了 feature/add_scorll分支,并提交到本地历史
...
$ git commit -m 'fixbug'
// 为了让线上能够继续运作,就需要合并到master主分支并打上tag
$ git checkout master
$ git merge --no-ff hotfix/fixbug
$ git tag -a v0.2 -m 'master0.2'
// 然后develop分支也需要合并,但是此时修改了同一个文件,所以接下来的合并会产生冲突,在dev分支上分别合并feature/add_scorll和hotfix/fixbug分支
$ git merge --no-ff feature/add_scorll
$ git merge --no-ff hotfix/fixbug
// (develop|MERGING) 状态改变
需要修复合并冲突后直接commit才能修复,然后其他两个分支的文件也依旧.只是在dev上做了冲突合并.
// 合并后就需要做测试,看是否会影响,切出release分支 
$ git checkout -b release
// 测试成功后分别提交到master打上tag和dev


你可能感兴趣的:(git)