1. 学习目标
- 掌握Git企业应用开发的基本操作以及背后原理,掌握工作区、暂存区、版本库的区别
- 掌握Git的版本管理,例如版本回退、撤销、修改等操作
- 掌握Git的分支管理,例如创建分支、合并分支、删除分支
- 掌握本地仓库与远程仓库之间的区别,达到个人企业级开发水准
- 了解团队协作开发,以及常见的模型
2. Git的安装
环境:宝塔Linux环境(腾讯云服务器)
使用命令如下:
# centos安装sudo yum install-ygit# centos移除sudo yum remove -ygit# ubantu安装sudoapt-getinstall-ygit# ubantu移除sudoapt-get remove -ygit# 查看git是否安装成功(版本)git--version
3. Git学习
3.1 Day01
前置工作:
- 如何初始化本地仓库:
git init
,执行该命令后就会在当前目录生成一个**.git**文件,这个.git文件就是版本库 - 如何配置用户名以及邮箱: 1. 配置用户名称:
git [--global] config user.name "xxx"
2. 配置用户邮箱:git [--global] config user.email "xxx"
可以使用
git config -l
查看配置信息
# 配置namegit config user.name "ricejson"# 配置emailgit config user.email "[email protected]"# 查看配置git config -l# 移除namegit config --unset user.name
# 移除emailgit config --unset user.email
# 配置全局namegit config --global user.name "ricejson"# 配置全局emailgit config --global user.email "[email protected]"
- 将工作区文件添加到暂存区中:
git add ./具体文件
- 将暂存区文件添加到master分支下:
git commit -m "具体描述信息"
- 可以使用
git log --pretty=oneline
命令查看历史提交信息
[root@VM-12-4-opencloudos gitcode]# touch readme[root@VM-12-4-opencloudos gitcode]# ls
readme
[root@VM-12-4-opencloudos gitcode]# vim readme [root@VM-12-4-opencloudos gitcode]# git add readme[root@VM-12-4-opencloudos gitcode]# git commit -m "add readme file"[master (root-commit) c85412b]add readme file1file changed, 1 insertion(+)
create mode 100644 readme
[root@VM-12-4-opencloudos gitcode]# git log
commit c85412bc2d6e2e7b1c94b1c9f3b36c44fd6a4826 (HEAD -> master)
Author: ricejson <[email protected]>
Date: Mon May 13 00:55:20 2024 +0800
add readme file
.git文件内容(版本库):
- index:标识暂存区/索引区中的内容
- head:指针,指向master分支下最新提交的记录
- objects:对象区,每一次对于工作区文件的修改都会对应到对象区中的一个.git对象
3.2 Day02
3.2.1 git status 命令
git追踪的是文件的修改而非文件本身!
我们需要清楚的了解到工作区与暂存区的文件是不一样的
输入
git status
命令可以查看仓库当前的状态,用来查看该文件内容是否相较于之前提交的版本有所修改
[root@VM-12-4-opencloudos gitcode]# ls
readme
[root@VM-12-4-opencloudos gitcode]# git status
On branch master
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: readme
no changes added to commit (use "git add" and/or "git commit -a")
我们可以看出readme文件已经被修改了,但是还没有进行添加和提交
当我们使用
git add readme
可以进行添加
[root@VM-12-4-opencloudos gitcode]# git add readme [root@VM-12-4-opencloudos gitcode]# git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: readme
当我们对readme文件添加到暂存区后,git status会显示待commited
[root@VM-12-4-opencloudos gitcode]# git commit -m "add readme"[master 689991b]add readme
1file changed, 1 insertion(+)[root@VM-12-4-opencloudos gitcode]# git status
On branch master
nothing to commit, working tree clean
当我们进行commit之后会显示当前tree 是clean的
3.2.2 git diff 命令
git status命令可以让我们知道哪些文件被修改了,但是我们无法看到具体修改的内容,但是git diff命令就可以查看文件的差异:
[root@VM-12-4-opencloudos gitcode]# git add readme [root@VM-12-4-opencloudos gitcode]# vim readme [root@VM-12-4-opencloudos gitcode]# git diff readmediff--git a/readme b/readme
index 8c7ca04..045403d 100644
--- a/readme
+++ b/readme
@@ -2,3 +2,5 @@ hello git
hello world!
ricejson
+
+one line
[root@VM-12-4-opencloudos gitcode]# git diff HEAD -- readmediff--git a/readme b/readme
index 15ca5b9..045403d 100644
--- a/readme
+++ b/readme
@@ -1,2 +1,6 @@
hello git-hello world!t
+hello world!
+
+ricejson
+
+one line
git diff filename
:查看工作区与暂存区中文件的差异git diff HEAD -- filename
:查看工作区和版本库中文件的差异
3.2.3 git reset 版本回退命令
命令:
git reset [--soft | --mixed | --hard] [HEAD]
- –mixed为默认参数:表示将版本库以及暂存区内容回退到指定版本,工作区内容不变
- –soft:表示将版本库内容回退到指定版本,工作区以及暂存区内容不变
- –hard:表示将版本库、工作区、暂存区都回退到指定版本
- HEAD:表示回退到当前版本,HEAD^、HEAD~1表示上一个版本,以此类推
现在我们想回退到v2版本,因此需要使用–hard参数
[root@VM-12-4-opencloudos gitcode]# git log --pretty=oneline
f4b771d0709db09cc5b5eb4e62335a755154209e (HEAD -> master) update readme v3
3662918784e02c58608b814ecba90e53292e581d update readme v2
689991ba08bd08804de26123c388b9b0d666e4f0 add readme
c85412bc2d6e2e7b1c94b1c9f3b36c44fd6a4826 add readme file[root@VM-12-4-opencloudos gitcode]# git reset --hard 3662918784e02c58608b814ecba90e53292e581d
HEAD is now at 3662918 update readme v2
[root@VM-12-4-opencloudos gitcode]# vim readme [root@VM-12-4-opencloudos gitcode]# git log --pretty=oneline
3662918784e02c58608b814ecba90e53292e581d (HEAD -> master) update readme v2
689991ba08bd08804de26123c388b9b0d666e4f0 add readme
c85412bc2d6e2e7b1c94b1c9f3b36c44fd6a4826 add readme file
但是现在我又后悔了,想回到v3版本应该怎么办?此时git log无法查看v3的提交id,还好Git还提供了一个命令
git reflog
进行补救:
[root@VM-12-4-opencloudos gitcode]# git reflog3662918(HEAD -> master) HEAD@{0}: reset: moving to 3662918784e02c58608b814ecba90e53292e581d
f4b771d HEAD@{1}: commit: update readme v3
3662918(HEAD -> master) HEAD@{2}: commit: update readme v2
689991b HEAD@{3}: commit: add readme
c85412b HEAD@{4}: commit (initial): add readme file[root@VM-12-4-opencloudos gitcode]# git reset --hard f4b771d
HEAD is now at f4b771d update readme v3
[root@VM-12-4-opencloudos gitcode]# git log --pretty=oneline
f4b771d0709db09cc5b5eb4e62335a755154209e (HEAD -> master) update readme v3
3662918784e02c58608b814ecba90e53292e581d update readme v2
689991ba08bd08804de26123c388b9b0d666e4f0 add readme
c85412bc2d6e2e7b1c94b1c9f3b36c44fd6a4826 add readme file
3.2.4 撤销修改命令
Case1:对于工作区中的代码还没有进行add操作
命令:
git checkout -- [file]
,可以将工作区的代码回到最近一次add或者commit的状态
[root@VM-12-4-opencloudos gitcode]# vim readme [root@VM-12-4-opencloudos gitcode]# git status
On branch master
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: readme
no changes added to commit (use "git add" and/or "git commit -a")[root@VM-12-4-opencloudos gitcode]# git checkout -- readme[root@VM-12-4-opencloudos gitcode]# git status
On branch master
nothing to commit, working tree clean
Case2:对于工作区中的代码已经进行add操作,但是还没有commit
方式一:使用回退命令:
git reset --hard HEAD
直接回退到当前版本
方式二:使用命令:
git reset --mixed HEAD
此时就回到了Case1的情况,然后继续执行git checkout – [file]命令
Case3:已经commit提交
使用回退命令:
git reset --hard HEAD^
直接回退到上一版本
3.2.5 删除命令
命令:git rm [file]
- git rm [file]相当于rm [file] + git add file1的结合体
[root@VM-12-4-opencloudos gitcode]# git commit -m "add file1"[master e907760]add file1
1file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file1
[root@VM-12-4-opencloudos gitcode]# git status
On branch master
nothing to commit, working tree clean
[root@VM-12-4-opencloudos gitcode]# git rm file1rm'file1'[root@VM-12-4-opencloudos gitcode]# git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: file1
[root@VM-12-4-opencloudos gitcode]# git commit -m "remove file1"[master 6e35bc4] remove file1
1file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 file1
3.3 Day03
3.3.1 git branch 命令
查看当前所有的分支:
**git branch**
之前我们观察到的.git目录下HEAD指针其实是指向master分支
而master分支则对应指向该分支下的提交记录
[root@VM-12-4-opencloudos gitcode]# cat .git/HEAD
ref: refs/heads/master
[root@VM-12-4-opencloudos gitcode]# cat .git/refs/heads/master
6e35bc4cab6906b0cb074e2af434b6dca77bb71f
[root@VM-12-4-opencloudos gitcode]# git cat-file -p 6e35bc4cab6906b0cb074e2af434b6dca77bb71f
tree 6ef62311f0d21fa88145f6e5c8e70bd80cd861b8
parent e907760d8466f84b3d655b287df15bebc50f83a5
author ricejson <[email protected]>1715595900 +0800
committer ricejson <[email protected]>1715595900 +0800
remove file1
新建分支:
**git branch dev**
[root@VM-12-4-opencloudos gitcode]# git branch dev[root@VM-12-4-opencloudos gitcode]# git branch
dev
* master
[root@VM-12-4-opencloudos gitcode]# cat .git/HEAD
ref: refs/heads/master
[root@VM-12-4-opencloudos gitcode]# tree .git
.git
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── fsmonitor-watchman.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── pre-merge-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ ├── pre-receive.sample
│ ├── push-to-checkout.sample
│ ├── sendemail-validate.sample
│ └── update.sample
├── index
├── info
│ └── exclude
├── logs
│ ├── HEAD
│ └── refs
│ └── heads
│ ├── dev
│ └── master
├── objects
│ ├── 04
│ │ └── 5403d976be5fbc25a531b5c924e664b3221fc6
│ ├── 15
│ │ └── ca5b906102a278626835d25f3d740c71ec3374
│ ├── 22
│ │ └── d19a942e422df71b16f6169eb65c27894d5a97
│ ├── 36
│ │ └── 62918784e02c58608b814ecba90e53292e581d
│ ├── 68
│ │ └── 9991ba08bd08804de26123c388b9b0d666e4f0
│ ├── 6e
│ │ ├── 35bc4cab6906b0cb074e2af434b6dca77bb71f
│ │ ├── 84d6a5ed71a327ba3376cac9801558d9ea2e80
│ │ └── f62311f0d21fa88145f6e5c8e70bd80cd861b8
│ ├── 8c
│ │ └── 7ca049e4ed76db4c19a2391ef45b749f8ae8c4
│ ├── 8d
│ │ └── 0e41234f24b6da002d962a26c2495ea16a425f
│ ├── 8e
│ │ └── 3bde47132a2d53b6c01daf870702fba582aeff
│ ├── c8
│ │ └── 5412bc2d6e2e7b1c94b1c9f3b36c44fd6a4826
│ ├── cd
│ │ └── 979bb355c3c301ed85b46c2b712e7a259625e0
│ ├── de
│ │ └── 55f88aa577ebe8b1294c26e0315470bd7bb8d4
│ ├── e5
│ │ └── c092dc5d9fcb8fdcd53fe30142957a503cc681
│ ├── e6
│ │ └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│ ├── e9
│ │ └── 07760d8466f84b3d655b287df15bebc50f83a5
│ ├── eb
│ │ └── b76d2d63485465b349f945977bbed134ed0f04
│ ├── f4
│ │ └── b771d0709db09cc5b5eb4e62335a755154209e
│ ├── info
│ └── pack
├── ORIG_HEAD
└── refs
├── heads
│ ├── dev
│ └── master
└── tags
29 directories, 45 files
3.3.2 git checkout 切换所在分支
切换当前分支:
git checkout 分支名
创建分支同时切换所在分支:
git checkout -b 分支名
3.3.3 git merge 合并分支
合并分支命令:
git merge 分支名
[root@VM-12-4-opencloudos gitcode]# git branch
dev
* master
[root@VM-12-4-opencloudos gitcode]# git checkout dev
Switched to branch 'dev'[root@VM-12-4-opencloudos gitcode]# git branch
* dev
master
[root@VM-12-4-opencloudos gitcode]# ls
readme
[root@VM-12-4-opencloudos gitcode]# vim readme[root@VM-12-4-opencloudos gitcode]# cat readme
hello git
hello world!
ricejson
one line
dev branch
[root@VM-12-4-opencloudos gitcode]# git add .[root@VM-12-4-opencloudos gitcode]# git commit -m "add merge branch content"[dev febf6ee]add merge branch content
1file changed, 2 insertions(+)[root@VM-12-4-opencloudos gitcode]# git status
On branch dev
nothing to commit, working tree clean
[root@VM-12-4-opencloudos gitcode]# git checkout master
Switched to branch 'master'[root@VM-12-4-opencloudos gitcode]# cat readme
hello git
hello world!
ricejson
one line
[root@VM-12-4-opencloudos gitcode]# git merge dev
Updating 6e35bc4..febf6ee
Fast-forward
readme |2 ++
1file changed, 2 insertions(+)[root@VM-12-4-opencloudos gitcode]# git status
On branch master
nothing to commit, working tree clean
[root@VM-12-4-opencloudos gitcode]# git log --pretty=oneline
febf6ee072d3f48c6bc1e46a60cb2d650f3a575f (HEAD -> master, dev)add merge branch content
6e35bc4cab6906b0cb074e2af434b6dca77bb71f remove file1
e907760d8466f84b3d655b287df15bebc50f83a5 add file1
f4b771d0709db09cc5b5eb4e62335a755154209e update readme v3
3662918784e02c58608b814ecba90e53292e581d update readme v2
689991ba08bd08804de26123c388b9b0d666e4f0 add readme
c85412bc2d6e2e7b1c94b1c9f3b36c44fd6a4826 add readme file[root@VM-12-4-opencloudos gitcode]# cat readme
hello git
hello world!
ricejson
one line
dev branch
3.3.4 git branch -d 删除分支
删除某个分支:
git branch -d 分支名
需要注意:只有在不同的分支下才能删除别的分支,例如想要删除dev分支,则不能在dev分支下操作,而应该在master分支下进行
3.3.5 演示合并冲突
步骤一:新建一个dev1分支,将readme新增add dev1内容,并进行提交
步骤二:在master分支下将readme新增add master内容,并进行提交
步骤三:进行合并操作
[root@VM-12-4-opencloudos gitcode]# git branch dev1[root@VM-12-4-opencloudos gitcode]# git branch
dev1
* master
[root@VM-12-4-opencloudos gitcode]# git checkout dev1
Switched to branch 'dev1'[root@VM-12-4-opencloudos gitcode]# git branch
* dev1
master
[root@VM-12-4-opencloudos gitcode]# vim readme [root@VM-12-4-opencloudos gitcode]# cat readme
hello git
hello world!
ricejson
one line
dev branch
add dev1
[root@VM-12-4-opencloudos gitcode]# git add .[root@VM-12-4-opencloudos gitcode]# git commit -m "add dev1"[dev1 f1c4920]add dev1
1file changed, 2 insertions(+)[root@VM-12-4-opencloudos gitcode]# git checkout master
Switched to branch 'master'[root@VM-12-4-opencloudos gitcode]# cat readme
hello git
hello world!
ricejson
one line
dev branch
[root@VM-12-4-opencloudos gitcode]# vim readme [root@VM-12-4-opencloudos gitcode]# git add .[root@VM-12-4-opencloudos gitcode]# git commit -m "add master"[master 6eb52f9]add master
1file changed, 2 insertions(+)[root@VM-12-4-opencloudos gitcode]# git log --pretty=oneline
6eb52f96f549ad74d35813dc8567797019660735 (HEAD -> master)add master
febf6ee072d3f48c6bc1e46a60cb2d650f3a575f add merge branch content
6e35bc4cab6906b0cb074e2af434b6dca77bb71f remove file1
e907760d8466f84b3d655b287df15bebc50f83a5 add file1
f4b771d0709db09cc5b5eb4e62335a755154209e update readme v3
3662918784e02c58608b814ecba90e53292e581d update readme v2
689991ba08bd08804de26123c388b9b0d666e4f0 add readme
c85412bc2d6e2e7b1c94b1c9f3b36c44fd6a4826 add readme file[root@VM-12-4-opencloudos gitcode]# git merge dev1
Auto-merging readme
CONFLICT (content): Merge conflict in readme
Automatic merge failed; fix conflicts and then commit the result.
[root@VM-12-4-opencloudos gitcode]# cat readme
hello git
hello world!
ricejson
one line
dev branch
<<<<<<< HEAD
add master
=======add dev1
>>>>>>> dev1
[root@VM-12-4-opencloudos gitcode]# vim readme [root@VM-12-4-opencloudos gitcode]# git add .[root@VM-12-4-opencloudos gitcode]# git commit -m "add master"[master 4717bf6]add master
[root@VM-12-4-opencloudos gitcode]# git merge dev1
Already up to date.
解决方法:当出现冲突之后,打开readme文件已经为我们展示了冲突区域,只需要选择最后修改保留的结果,删除冲突部分即可,最后记得要进行提交!!!然后再合并就OK了
3.4 Day04
分支策略:
- 线上环境运行的都是master分支下的代码,因此master要保证稳定性
- 而其余分支例如dev就是开发人员开发的分支,是没有经过测试的因此会出现bug等不稳定因素
3.4.1 bug分支
现在有这样一种情况:master分支下又新建了一个dev分支开发别的业务,但是此时突然发现master分支代码存在bug,因此需要修复
注意:不能在master分支下直接修复bug!因为线上环境一定要保证稳定
最佳实践:
- 步骤一:先在reslove_bug分支下修复正确代码,然后进行提交并合并到master分支下
- 步骤二:在dev分支下,将master分支合并到dev分支下,然后解决冲突再进行提交
- 步骤三:最后将dev分支合并到master分支下
[root@VM-12-4-opencloudos gitcode]# git checkout -b dev
Switched to a new branch 'dev'[root@VM-12-4-opencloudos gitcode]# git branch
* dev
master
[root@VM-12-4-opencloudos gitcode]# ls
readme
[root@VM-12-4-opencloudos gitcode]# vim readme [root@VM-12-4-opencloudos gitcode]# git add .[root@VM-12-4-opencloudos gitcode]# git commit -m "add coding"[dev e6d2c36]add coding
1file changed, 2 insertions(+)[root@VM-12-4-opencloudos gitcode]# git checkout master
Switched to branch 'master'[root@VM-12-4-opencloudos gitcode]# ls
readme
[root@VM-12-4-opencloudos gitcode]# cat readme
hello git
hello world!
ricejson
one line
dev branch
add master
[root@VM-12-4-opencloudos gitcode]# vim readme [root@VM-12-4-opencloudos gitcode]# git checkout -b reslove_bug
Switched to a new branch 'reslove_bug'[root@VM-12-4-opencloudos gitcode]# vim readme [root@VM-12-4-opencloudos gitcode]# git add .[root@VM-12-4-opencloudos gitcode]# git commit -m "add reslove bug"[reslove_bug 267809e]add reslove bug
1file changed, 1 insertion(+), 1 deletion(-)[root@VM-12-4-opencloudos gitcode]# git checkout master
Switched to branch 'master'[root@VM-12-4-opencloudos gitcode]# cat readme
hello git
hello world!
ricejson
one line
dev branch
add master
[root@VM-12-4-opencloudos gitcode]# git merge reslove_bug
Updating 4717bf6..267809e
Fast-forward
readme |2 +-
1file changed, 1 insertion(+), 1 deletion(-)[root@VM-12-4-opencloudos gitcode]# cat readme
hello git
hello world!
ricejson
one line
dev branch
add master reslove bug
[root@VM-12-4-opencloudos gitcode]# git checkout dev
Switched to branch 'dev'[root@VM-12-4-opencloudos gitcode]# cat readme
hello git
hello world!
ricejson
one line
dev branch
add master
i am coding...
[root@VM-12-4-opencloudos gitcode]# git merge master
Auto-merging readme
CONFLICT (content): Merge conflict in readme
Automatic merge failed; fix conflicts and then commit the result.
[root@VM-12-4-opencloudos gitcode]# vim readme [root@VM-12-4-opencloudos gitcode]# git add .[root@VM-12-4-opencloudos gitcode]# git commit -m "merge reslove bug to dev"[dev 95fff14] merge reslove bug to dev
[root@VM-12-4-opencloudos gitcode]# git merge -m "merge master to dev" master
Already up to date.
[root@VM-12-4-opencloudos gitcode]# git checkout master
Switched to branch 'master'[root@VM-12-4-opencloudos gitcode]# cat readme
hello git
hello world!
ricejson
one line
dev branch
add master reslove bug
[root@VM-12-4-opencloudos gitcode]# git merge dev -m "merge dev to master"
Updating 267809e..95fff14
Fast-forward (no commit created;-m option ignored)
readme |2 ++
1file changed, 2 insertions(+)[root@VM-12-4-opencloudos gitcode]# cat readme
hello git
hello world!
ricejson
one line
dev branch
add master reslove bug
i am coding...
[root@VM-12-4-opencloudos gitcode]# git log --graph --pretty=oneline
* 95fff140599ed8d3ef010f5e8ad280570f46b1a7 (HEAD -> master, dev) merge reslove bug to dev
|\| * 267809ed8ec8759bea2ac269ed4b1217081beba7 (reslove_bug)add reslove bug
* | e6d2c366dfae0c939715c5ae52abe70d894923bd add coding
|/
* 4717bf64651c6f05c64a5a136a72814305365b75 add master
|\| * f1c4920a23ab59a6eedd692defa071e66ed623d6 add dev1
* | 6eb52f96f549ad74d35813dc8567797019660735 add master
|/
* febf6ee072d3f48c6bc1e46a60cb2d650f3a575f add merge branch content
* 6e35bc4cab6906b0cb074e2af434b6dca77bb71f remove file1
* e907760d8466f84b3d655b287df15bebc50f83a5 add file1
* f4b771d0709db09cc5b5eb4e62335a755154209e update readme v3
* 3662918784e02c58608b814ecba90e53292e581d update readme v2
* 689991ba08bd08804de26123c388b9b0d666e4f0 add readme
* c85412bc2d6e2e7b1c94b1c9f3b36c44fd6a4826 add readme file[root@VM-12-4-opencloudos gitcode]#
3.4.2 强制删除分支
前面我们已经使用过
git branch -d 分支名
进行删除分支,
但是这种情况下我们只能够删除已经合并过后的分支,但是如果该分支我们没有进行合并操作,那就必须使用强制删除:
git branch -D 分支名
[root@VM-12-4-opencloudos gitcode]# git branch dev1[root@VM-12-4-opencloudos gitcode]# git checkout dev1
Switched to branch 'dev1'[root@VM-12-4-opencloudos gitcode]# vim readme [root@VM-12-4-opencloudos gitcode]# git add .[root@VM-12-4-opencloudos gitcode]# git commit -m "add coding again"[dev1 2428a7d]add coding again
1file changed, 2 insertions(+)[root@VM-12-4-opencloudos gitcode]# cat readme
hello git
hello world!
ricejson
one line
dev branch
add master reslove bug
i am coding...
i am coding again
[root@VM-12-4-opencloudos gitcode]# git checkout master
Switched to branch 'master'[root@VM-12-4-opencloudos gitcode]# git branch -d dev1
error: The branch 'dev1' is not fully merged.
If you are sure you want to delete it, run 'git branch -D dev1'.[root@VM-12-4-opencloudos gitcode]# git branch -D dev1
Deleted branch dev1 (was 2428a7d).
[root@VM-12-4-opencloudos gitcode]# git branch
* master
3.5 Day05
3.5.1 克隆远程仓库
- 首先需要查看本地主目录下有无/root/.ssh/id_rsa以及.ssh/id_rsa.pub这两个秘钥
- 【上述步骤没有则需要执行】ssh-keygen -t rsa -C "wjjbangbangbang@163.com"生成密钥
- 将id_rsa.pub中的公钥内容复制到gitee平台配置中
- 然后使用SSH协议执行git clone命令克隆仓库
[root@VM-12-4-opencloudos home]# git clone [email protected]:eat-rice-well/remote-gitcode.git
Cloning into 'remote-gitcode'...
The authenticity of host'gitee.com (180.76.198.77)' can't be established.
ED25519 key fingerprint is SHA256:+ULzij2u99B9eWYFTw1Q4ErYG/aepHLbu96PAUCoV88.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitee.com' (ED25519) to the list of known hosts.
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 7(delta 0), reused 0(delta 0), pack-reused 0
Receiving objects: 100% (7/7), done.
[root@VM-12-4-opencloudos home]# ls
gitcode lighthouse remote-gitcode springboot www
[root@VM-12-4-opencloudos home]# cd remote-gitcode[root@VM-12-4-opencloudos remote-gitcode]# ls
README.en.md README.md
[root@VM-12-4-opencloudos remote-gitcode]# git config -luser.name=ricejson
[email protected]
core.repositoryformatversion=0core.filemode=true
core.bare=false
core.logallrefupdates=true
[email protected]:eat-rice-well/remote-gitcode.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
[root@VM-12-4-opencloudos remote-gitcode]# git config --unset user.name[root@VM-12-4-opencloudos remote-gitcode]# git config -luser.name=ricejson
[email protected]
core.repositoryformatversion=0core.filemode=true
core.bare=false
core.logallrefupdates=true
[email protected]:eat-rice-well/remote-gitcode.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
[root@VM-12-4-opencloudos remote-gitcode]# git config --global user.name "米饭好好吃"[root@VM-12-4-opencloudos remote-gitcode]# git config -luser.name=米饭好好吃
[email protected]
core.repositoryformatversion=0core.filemode=true
core.bare=false
core.logallrefupdates=true
[email protected]:eat-rice-well/remote-gitcode.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
3.5.2 推送到远程仓库
命令:
git push origin(远程仓库名) master(本地分支):master(远程分支)
如果本地分支和远程分支一致,可以简写为
git push origin master
[root@VM-12-4-opencloudos remote-gitcode]# ls
file.txt README.en.md README.md
[root@VM-12-4-opencloudos remote-gitcode]# vim file.txt[root@VM-12-4-opencloudos remote-gitcode]# git add .[root@VM-12-4-opencloudos remote-gitcode]# git commit -m "add file.txt"[master 07ad17b]add file.txt
1file changed, 1 insertion(+)
create mode 100644 file.txt
[root@VM-12-4-opencloudos remote-gitcode]# 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
[root@VM-12-4-opencloudos remote-gitcode]# git push origin master:master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 2 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 293 bytes |293.00 KiB/s, done.
Total 3(delta 1), reused 0(delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:eat-rice-well/remote-gitcode.git
e84d96b..07ad17b master -> master
3.5.3 从远程仓库进行拉取
命令:
git pull origin(远程仓库名) master(远程分支名):master(本地分支名)
注意:
- 如果本地分支和远程分支一致,可以简写为
git pull origin master
- pull命令执行了两件事,一件是clone代码,另一件就是进行merge合并
[root@VM-12-4-opencloudos remote-gitcode]# git pull origin master:master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3(delta 1), reused 0(delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 975 bytes |975.00 KiB/s, done.
From gitee.com:eat-rice-well/remote-gitcode
07ad17b..ae0b3ba master -> master
07ad17b..ae0b3ba master -> origin/master
warning: fetch updated the current branch head.
fast-forwarding your working tree from
commit 07ad17b0133c2b604511760c131bc166415d1496.
Already up to date.
[root@VM-12-4-opencloudos remote-gitcode]# vim file.txt [root@VM-12-4-opencloudos remote-gitcode]# cat file.txt
hello git
hello world
[root@VM-12-4-opencloudos remote-gitcode]#
3.5.4 .gitignore忽略文件
使用方法:
- 可以使用*.yml忽略所有的.yml格式结尾的文件
- 可以使用文件名忽略文件
- 可以使用!表示不忽略该文件
- 可以使用git add -f 强制添加(可以无视忽略规则)
[root@VM-12-4-opencloudos remote-gitcode]# touch .gitignore[root@VM-12-4-opencloudos remote-gitcode]# vim .gitignore [root@VM-12-4-opencloudos remote-gitcode]# cat .gitignore # 配置忽略文件
*.yml
!test.yml
[root@VM-12-4-opencloudos remote-gitcode]# touch application.yml[root@VM-12-4-opencloudos remote-gitcode]# git status
On branch master
Your branch is up to date with 'origin/master'.
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: file.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
no changes added to commit (use "git add" and/or "git commit -a")[root@VM-12-4-opencloudos remote-gitcode]# touch test.yml[root@VM-12-4-opencloudos remote-gitcode]# git status
On branch master
Your branch is up to date with 'origin/master'.
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: file.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
test.yml
no changes added to commit (use "git add" and/or "git commit -a")
如果要查看为什么某个文件被忽略,也可以使用
git check-ignore application.yml
[root@VM-12-4-opencloudos remote-gitcode]# git check-ignore -v application.yml
.gitignore:3:*.yml application.yml
3.5.5 给命令配置别名
命令:
git config --global alias.st status
则我们的git status就相当于git st
对于一些长命令,例如:
git log --pretty=onelone --abbrev-commit
也可以配置成git lpa
3.3.6 标签管理
命令:
- 查看所有标签:
git tag
- 新增标签:
git tag 标签名 commit的id(默认为最新提交id)
- 删除标签:
git tag -d 标签名
- 给标签生成描述信息:
git tag -a 标签名 -m "描述信息" commit_id
- 展示标签描述信息:
git show 标签名
[root@VM-12-4-opencloudos remote-gitcode]# git tag[root@VM-12-4-opencloudos remote-gitcode]# git tag v1.0[root@VM-12-4-opencloudos remote-gitcode]# git tag
v1.0
[root@VM-12-4-opencloudos remote-gitcode]# git log --pretty=oneline --abbrev-commit
13d93bf (HEAD -> master, tag: v1.0)addtest .gitignore file
ae0b3ba (origin/master, origin/HEAD) update file.txt.
07ad17b add file.txt
e84d96b Initial commit
[root@VM-12-4-opencloudos remote-gitcode]# git tag -a v0.9 -m "important tag" 07ad17b[root@VM-12-4-opencloudos remote-gitcode]# git tag
v0.9
v1.0
[root@VM-12-4-opencloudos remote-gitcode]# git show 07ad17b
commit 07ad17b0133c2b604511760c131bc166415d1496 (tag: v0.9)
Author: 米饭好好吃 <[email protected]>
Date: Thu May 1614:58:10 2024 +0800
add file.txt
diff--git a/file.txt b/file.txt
new file mode 100644
index 0000000..8d0e412
--- /dev/null
+++ b/file.txt
@@ -0,0 +1 @@
+hello git[root@VM-12-4-opencloudos remote-gitcode]#
- 将标签推送到远程仓库:
git push 指定标签名(--tags表示全部标签)
[root@VM-12-4-opencloudos remote-gitcode]# git push --tags origin master
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Delta compression using up to 2 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (6/6), 649 bytes |649.00 KiB/s, done.
Total 6(delta 0), reused 0(delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:eat-rice-well/remote-gitcode.git
ae0b3ba..13d93bf master -> master
* [new tag] v0.9 -> v0.9
* [new tag] v1.0 -> v1.0
- 推送移除标签:
git push origin :v1.0
[root@VM-12-4-opencloudos remote-gitcode]# git push origin :v1.0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:eat-rice-well/remote-gitcode.git
- [deleted] v1.0
[root@VM-12-4-opencloudos remote-gitcode]#
3.6 Day06—多人协作开发实战
查看远程分支和本地分支:
git branch -a
查看远程分支:
git branch -r
新建并切换分支并与远程分支建立链接:
git checkout -b dev origin/dev
目标:在本地仓库中file.txt文件新增aaa以及bbb内容
环境:存在开发者1以及开发者2,要求开发者1完成aaa,开发者2完成bbb
条件:两个开发者基于同一个分支进行开发
- step1:在gitee平台新建分支dev用于开发
- step2:在开发者1平台下进行git pull拉取最新代码、在开发者2平台下进行git pull拉取最新代码
- step3:在开发者1平台下使用
git checkout -b dev origin/dev
新建并切换分支,并与远程dev分支建立链接 - step4:在dev分支下修改aaa代码并add、commit并push到远程dev分支下
- step5:在开发者2平台下进行
git checkout -b dev origin/dev
新建并切换分支,并与远程dev分支建立链接 - step6:在dev分支下修改bbb代码并add、commit并push到远程dev分支下,此时报错,因为出现合并冲突
- step7:在开发者2中将远程dev分支下内容进行pull到dev下进行解决冲突,然后重新add、commit、push操作
- step8:dev分支合并到master下 1. 方式一:使用提交PR单,交由审核人员进行审核2. 方式二:在本地操作,首先进行git pull拉取最新代码,然后将master分支合并到dev下解决冲突,在提交到本地master分支,然后再由master进行push
- step9:最后dev分支开发完毕后删除即可
版权归原作者 米饭好好吃. 所有, 如有侵权,请联系我们删除。