免费注册
流程类
图形化表达方式
脑图类
结构化表达方式
笔记类
高效化表达方式
软件与系统设计
UML
工程与技术设计
数据分析与研究
其他图形
自由结构
树形图
括号图
默认模式

代码版本管理--git基本操作

ProcessOn阳光 3月前
616
ProcessOn,立刻提升你的工作效率
首页 知识社区 代码版本管理--git基本操作

Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Git 允许并鼓励您拥有多个可以完全独立的本地分支。这些开发线的创建、合并和删除只需几秒钟。管理的文件不受文件类型的限制,可以是文本文件、图片文件、视频媒体等文件。

为什么需要版本控制

  1. 在开发过程中,经常需要对一个文件进行修改甚至删除,但是我们又希望能够保存这个文件的历史记录,如果通过备份,那么管理起来会非常的复杂。
  2. 在多人开发时,如果需要多人合作开发一个页面,那么修改以及合并也会非常的棘手。容易出现冲突。

常见的版本控制系统

 cvs、git、svn

git的基本操作

git图解

git图解

git的本地几个分区

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

ss    

新增文件(未放入暂存区的)

新建 a.txt b.txt  执行 git add a/ 把a目录下所有的文件放入暂存区

执行 git add -A 把所有的untracked 文件放入 暂存区

执行 git status

//修改了版本库中的文件
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   a/a.txt
//新增的文件
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        a/c.txt



Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   a/a.txt
        new file:   a/b.txt
 
git restore --staged  a/a.txt 从暂存区撤销a.txt文件

reset HEAD

针对已经commit的文件,进行修改后,再执行 git reset HEAD 
$ git reset HEAD
Unstaged changes after reset:
M       a/a.txt



Unstaged changes after reset  
大致的意思:有修改未提交的改动文件,不能执行当前的命令。 你需要把你修改内容提交或者暂存或者撤销后才可以执行这个。

提交代码时注意事项

使用tortoiseGit提交时的操作界面:

使用idea提交时的操作界面:

commit

1、由于当前项目相关开发人员比较,每个人可能同时负责好几个功能(不同的分支)的交叉开发,所以当前提交规范是:[分支名] 提交内容描述
git commint -m [branchName] describe

2、提交之前,需要核对每个待提交的文件及文件内容
   (1)核对文件 是否是你需要本次提交的文件(有一些新增的临时测试文件(java、config、log) 不要提交上来)
   (2)核对文件内容 是否有多余的临时内容(调试的代码、日志)

查看本地已经commit 但是还没有push到服务器的

$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

###上面信息:显示本地有1个commit 未执行push

###下面显示具体未执行push的commit信息:
参考:https://blog.csdn.net/weixin_46074961/article/details/126400431

$ git log master ^origin/master  【--stat 列出提交的文件列表】
commit c26149691b70c6c95ab3a3df649b7de74af344f0 (HEAD -> master)
Author: wangp <wangp@processon.com>
Date:   Mon Jul 10 14:15:12 2023 +0800

    [master] 修改a.txt; 新增c.txt

或者
$ git cherry -v
+ c26149691b70c6c95ab3a3df649b7de74af344f0 [master] 修改a.txt; 新增c.txt


git show commitId 查看单词commit的文件详细变动信息

冲突

A用户:修改 a/a.txt 文件内容  abc  改为 abc1111,值commit,push
    
B用户:修改a/a.txt文件内容  abc  改为 abc1111

或者

由于A用户已修改并且push到服务器,导致B用户修改内容push失败

接下来需要pull=fetch+merge


$ git pull
info: detecting host provider for 'http://192.168.1.22/'...
info: detecting host provider for 'http://192.168.1.22/'...
info: detecting host provider for 'http://192.168.1.22/'...
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 5 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), 376 bytes | 31.00 KiB/s, done.
From http://192.168.1.22/processon_c_team/java/processon-test-git-demo
   4f716c9..c261496  master     -> origin/master
Auto-merging a/a.txt
CONFLICT (content): Merge conflict in a/a.txt
Automatic merge failed; fix conflicts and then commit the result.

po@DESKTOP-SE4331O MINGW64 /project/v5_project/processon-test-git-demo/processon-test-git-demo (master|MERGING)

产生了冲突:使用idea进行解决(一定要仔细查看每一个冲突的地方,不要merge错了,我之前看到过,有的人,直接用一遍覆盖另一边)。


接下来出现的可能操作:
1、强行推
git push --force origin master  #强行推 把别人的覆盖掉

基于maste新建分支:test1 

po@DESKTOP-SE4331O MINGW64 /processon-test-git-demo (master)
$ git checkout -b  test1
Switched to a new branch 'test1'

其他用户执行pull拉取
$ git pull
info: detecting host provider for 'http://192.168.1.22/'...
info: detecting host provider for 'http://192.168.1.22/'...
info: detecting host provider for 'http://192.168.1.22/'...
From http://192.168.1.22/processon_c_team/java/processon-test-git-demo
 * [new branch]      test1      -> origin/test1
Already up to date.


A用户修改a.txt 文件,commit  push

B用户修改a.txt 文件,commit

git分支变更信息

图标颜色:绿色、黄色、紫色

执行 git pull 之后(注意黄色图标)

B用户再次修改a.txt,commit

B用户执行push后(注意紫色的图标)

代码回滚

git reset --mixed(默认) 撤回之后所有内容全部放进工作区中。 git reset --soft 撤回之后所有内容全部放进暂存区。 git reset --hard 撤回并清空工作目录及暂存区所有修改。

git reset --mixed (A用户第二次提交 )

A用户侧:执行$ git reset HEAD 是没有变化的,因为当前head 就是当前所在编辑位置

A用户侧:执行 git reset ffa9fa96 上一次提交的节点id, 执行后

此时执行 git status 看看什么状态?

撤销本地修改:
第一种:git reset HEAD a/a.txt  这个是从暂存区移除(修改内容没有删除),回到工作区;也可以使用git restore --staged a/a.txt

第二种(慎用,彻底删除了):参考:https://blog.csdn.net/linyichao123/article/details/128359279
# 让工作区中的所有文件撤销更改
git checkout -- .
# 让工作区中的某些文件撤销更改
git checkout -- <file1> <file2>

以上模板截图内容来自ProcessOn 模板社区,你可以点击此链接查看详情。如果你想要将自己的知识结构化记录下来,ProcessOn 是你的绝佳选择,提供多种专业图形的绘制工具和丰富的模板内容,支持工作、学习和生活各个方面的应用。

免费在线协同思维导图流程图 免费使用