当前位置:   article > 正文

[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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

二、分支管理

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

三、拉取与提交命令

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"	# 提交解决冲突后的新版本
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

5. git diff

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

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

操作记录:

# 对比工作区和版本库文件的不同
[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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/643420
推荐阅读
  

闽ICP备14008679号