Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Git 允许并鼓励您拥有多个可以完全独立的本地分支。这些开发线的创建、合并和删除只需几秒钟。管理的文件不受文件类型的限制,可以是文本文件、图片文件、视频媒体等文件。
为什么需要版本控制:
常见的版本控制系统:
cvs、git、svn
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 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 是你的绝佳选择,提供多种专业图形的绘制工具和丰富的模板内容,支持工作、学习和生活各个方面的应用。