[Git] 两张图理解工作区、暂存区和版本库并总结git常用命令

前情提要

学了很多 git 命令,还有就是工作区、暂存区和版本库,这三个搞来搞去有点懵逼,自己总结了一下,做的图有些简陋,如果有不对的地方,烦请大佬们指出。

一、版本管理

1. 一张图总结

在这里插入图片描述

2. 版本管理常用命令

# 创建版本库
git init


# 版本创建
git add
git commit -m "版本说明信息"


# 查看版本记录
git log


# 版本回溯,HEAD^指向当前版本的前一版本
git reset --hard HEAD^


# 查看操作记录
git reflog


# 提交修改
git add		# 把工作区的修改放入暂存区
git add -u	# 只add已经追踪过的文件
git commit -m "修改信息"	# 把暂存区的修改做一次版本记录


# 撤销修改,撤销 add 和 commit 操作
1. 撤销工作区的修改
    git checkout -- <file>

2. 撤销已经add到暂存区,但未commit的修改
    git reset HEAD <file>
    +
    # git checkout -- <file>	# 注意,这会将工作区的修改也撤销,如果不希望撤销工作区的修改则不必使用

3. 已经commit,版本回退至前一版本
    # 1.git reset --soft 版本号 
    # 不删除工作区改动的代码,撤销commit,不撤销git add .
    git reset --soft HEAD^  //回到上一个版本

    # 2.git reset --mixed 版本号 
    # 不删除工作区改动的代码,撤销commit,撤销git add .
    git reset --mixed HEAD^  //回到上一个版本

    # 3.git reset --hard 版本号 
    # 删除工作区的代码,撤销commit,撤销git add . 回到上一次commit的状态
    git reset --hard HEAD^  # 慎用此命令,因为会将工作区的文件也一并修改掉

二、分支管理

1. 一张图总结

在这里插入图片描述

2. git 常用分支命名

Production分支(主线分支用于发版,不会直接改)
Master分支,这个分支只能从其他分支合并,不能在这个分支直接修改
 
Develop分支(开发分支)
这个分支是我们是我们的主开发分支,包含所有要发布到下一个Release的代码,这个主要合并与其他分支,比如Feature分支
 
Feature分支(新功能分支)
这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回Develop分支进入下一个Release 
 
Release分支(偏向测试)
当你需要一个发布一个新Release的时候,我们基于Develop分支创建一个Release分支,完成Release后,我们合并到Master和Develop分支
 
Hotfix分支(紧急bug发布)
当我们在Production发现新的Bug时候,我们需要创建一个Hotfix, 完成Hotfix后,我们合并回Master和Develop分支,所以Hotfix的改动会进入下一个Release

3. git branch 和 git checkout

# 查看帮助
git branch -h			# 终端中输出帮助
git branch --help		# 打开git帮助文档

# 查看remotes/origin下的分支
git branch -r
git ls-remote origin	# 会显示最新的 commit ID

# 查看所有分支,包括heads下和remotes/origin下的
git branch -a

# 切换分支
git checkout <分支名>

# 新建分支,默认以当前分支为基础
git branch <新分支名>

# 新建并切换分支
git checkout -b <新分支名>

# 删除分支,删除的是heads下的分支test
git branch -d test

# 删除remotes/origin下的分支test,并提交到远端(即删除远端的test)
git branch -rd origin/test
git push origin --delete test	# push会同时删除remotes/origin和远端的test

# 提交分支:push分支test到remotes/origin和远端的new_test
git push origin test:new_test

# 重命名分支,重命名的是heads下的分支
git branch -m old_name new_name

# 删除所有名字以 temp 开头的分支(多加两个空格是因为 git branch 输出结果带有空格)
git branch | grep -E "^  temp" | xargs git branch -d
git branch | grep -E "^  temp" | xargs git branch -D	# 强制删除

# 强制删除 master 和当前分支以外的所有分支
git branch | grep -Ev "master" | xargs git branch -D

三、拉取与提交命令

1. git merge

merge 默认会将分支与 当前分支 合并。当前分支指的是 HEAD 指向的分支,该分支的指向可以在

# 将origin/master与当前分支合并
git merge origin/master

# 将hotfix分支与当前分支合并,hotfix默认搜索heads/
git merge hotfix
git diff hotfix 	# 查看hotfix与当前分支的不同

# 出现冲突,解决过程
git status -s	# UU 表示出现冲突的文件
vim conflict.*	# 先修改出现冲突的文件
git add .		# add 告诉git冲突已经解决
git status -s	# M 表示冲突已经解决
git commit -m "conflict"	# 提交解决冲突后的新版本

2. git fetch

fetch 默认只将远端更新到remotes/origin,不会更新heads

# 将远端更新到remotes/origin,不会更新heads
git fetch
git diff HEAD FETCH_HEAD	

# 获取远端的分支,即同步远端的dev分支到 remotes/origin/dev 和 heads/temp
git fetch origin dev:temp

3. git pull

pull 相当于 fetchmerge,会更新到 当前分支

# 默认拉取的是与远端HEAD指向的分支,同时合并到本地HEAD指向的当前分支
git pull 

# 拉取远端dev分支到本地,并合并到当前分支
git pull origin dev = git fetch origin + git merge origin/dev

# 拉取本地不存在的远端分支
git pull origin dev:dev

4. git push

push 会同时影响 remotes/origin 和远端。远端不存在push的分支时,会创建它。

# 提交当前分支到远端,如果当前分支HEAD指向的master,就提交本地master到远端master。
git push

# 提交本地的master到远端的master,远端master不存在时会被创建。本地master不存在则会报错。
git push origin master

# 提交分支:push分支master到remotes/origin和远端的master_r
git push origin master:master_r

# push会同时删除remotes/origin和远端的test
git push origin --delete test	

5. git diff

diff 可以查看分支内容的改动。

# git diff <local branch> <remote>/<remote branch> 
# 显示本地 master 分支和 远程 master 分支文件改动的摘要
git diff --stat master origin/master  

操作记录:

# 对比工作区和版本库文件的不同
[root@i hellogit]# git diff HEAD -- code.py 
diff --git a/code.py b/code.py
index 8ebeb35..61ef177 100644
--- a/code.py	# -代表版本库
+++ b/code.py	# +代表工作区
@@ -1 +1,2 @@
 1. This is a code py
+2. This for git add and git checkout -- file	# 出现+号,说明工作区比HEAD版本多了一行


# 对比两个版本库文件的不同
[root@i hellogit]# git diff HEAD HEAD^ -- code.py 
diff --git a/code.py b/code.py
index 61ef177..8ebeb35 100644
--- a/code.py	# -代表当前版本
+++ b/code.py	# +代表后一个版本
@@ -1,2 +1 @@
 1. This is a code py
-2. This for git add and git checkout -- file	# 当前版本比后一个版本多一行

[root@i hellogit]# git diff HEAD^ HEAD -- code.py 
diff --git a/code.py b/code.py
index 8ebeb35..61ef177 100644
--- a/code.py	# -代表后一个版本
+++ b/code.py	# +代表当前版本
@@ -1 +1,2 @@
 1. This is a code py
+2. This for git add and git checkout -- file	# 当前版本比后一个版本多一行
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值