Linux架构篇、第五章_02git2.49.0分支管理与Gitee的部署
Linux_架构篇
欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神!
题目:分支管理与gitee
版本号: 1.0,0
作者: @老王要学习
日期: 2025.05.14
适用环境: Centos 7
文档说明
本文围绕 Git 操作展开,适用于 Centos7 环境。详细介绍创建、切换、合并、删除分支方法,阐述解决分支冲突的步骤,对比快进与非快进合并差异,还讲解通过 Git 将代码上传到 Gitee 公有仓库的全流程,助用户掌握 Git 分支管理技能
环境准备
硬件要求
- 服务器: 2核CPU、2GB内存,20GB硬盘空间
- 网络: 确保服务器具有固定的IP地址,并且防火墙允许FTP端口(默认22端口)的通信
软件要求
- 操作系统:Centos7
- FTP软件:SecureCRT
- 软件包:git-2.49.0.tar.xz 与 git-manpages-2.49.0.tar.xz
一、创建、切换、合并、分支
1.1创建分支dev
# 创建一个新分支,并进入新分支
git checkout -b dev
#输出如下:
Switched to a new branch 'dev'# 查看创建的Git分支
git branch
* devmaster# 添加内容
cat >>devtest.log<<EOF
> asdfg
> sdfgh
> EOF# 添加到缓存区
git add .# 提交缓存区
git commit -m "add devtest"
#输出如下:
[dev 3bd89ac] add devtest1 file changed, 2 insertions(+)create mode 100644 devtest.log# 查看状态
git status
#输出如下:
On branch dev
nothing to commit, working tree clean#查看当前文件
ll
#输出如下:
total 12
-rw-r--r-- 1 root root 12 May 13 02:47 devtest.log
-rw-r--r-- 1 root root 26 May 13 01:06 test2.txt
-rw-r--r-- 1 root root 16 May 13 00:54 test.txt
1.2切换分支
# 切换到master分支
git checkout master
#输出如下:
Switched to branch 'master'#查看目录(发现没有察觉到devtest.log文件,因为它创建在dev分支中)
[root@git01 mygit]# ll
total 8
-rw-r--r-- 1 root root 26 May 13 01:06 test2.txt
-rw-r--r-- 1 root root 16 May 13 00:54 test.txt#我们在切换回dev分支
git checkout dev
#输出如下:
Switched to branch 'dev'# 查看创建的文件是存在的
[root@git01 mygit]# ll
total 12
-rw-r--r-- 1 root root 12 May 13 03:36 devtest.log
-rw-r--r-- 1 root root 26 May 13 01:06 test2.txt
-rw-r--r-- 1 root root 16 May 13 00:54 test.txt
1.3合并分支
# 切换回主分支
git checkout master
#输出如下:
Switched to branch 'master'#合并master与dev分支
git merge dev
#输出如下:
Updating 9116daf..3bd89ac
Fast-forwarddevtest.log | 2 ++1 file changed, 2 insertions(+)create mode 100644 devtest.log#查看当前目录(合并成功devtest.log文件显示)
[root@git01 mygit]# ll
total 12
-rw-r--r-- 1 root root 12 May 13 03:44 devtest.log
-rw-r--r-- 1 root root 26 May 13 01:06 test2.txt
-rw-r--r-- 1 root root 16 May 13 00:54 test.txt
1.4删除分支
# 删除dev分支(因dev数据已经合并到master,可以放心清除dev分支)
git branch -d dev
#输出如下:
Deleted branch dev (was 3bd89ac).# 查看当前分支
git branch
#输出如下:
* master
1.5小结
指令 | 功能 |
---|---|
git branch | 查看分支 |
git branch lw | 创建分支(lw) |
git checkout lw | 切换分支(lw) |
git checkout -b lw2 | 创建并进入分支(lw2) |
git merge lw | 合并lw到lw2 |
git branch -d lw | 删除分支(lw) |
二、解决冲突
2.1创建分支(test1)
# 创建分支并进入
git checkout -b test1
#输出如下:
Switched to a new branch 'test1'# 插入一行数据到test.txt
cat >>test.txt<<EOF
test1
EOF# 添加到缓存区
git add .# 提交缓存区git commit -m "modify test a"
#输出如下:
[test1 b487be1] modify test a1 file changed, 1 insertion(+)# 查看状态
git status
#输出如下:
On branch test1
nothing to commit, working tree clean
2.2进入master进行编辑
# 切换到master分支git checkout master#输出如下:
Switched to branch 'master'# 插入一行数据到test.txt
cat >>test.txt<<EOF
master
EOF#添加到缓存区
git add .#提交缓存区
git commit -m "add master line"
#输出如下:
[master bc3a7c0] add master line1 file changed, 1 insertion(+)# 查看状态
git status
#输出如下:
On branch master
nothing to commit, working tree clean
2.3在master合并test1
# 合并分支test1
git merge test1
#输出如下:
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.# 查看状态(报错)
git status
#输出如下:
On branch master
You have unmerged paths.(fix conflicts and run "git commit")(use "git merge --abort" to abort the merge)Unmerged paths:(use "git add <file>..." to mark resolution)both modified: test.txtno changes added to commit (use "git add" and/or "git commit -a")# 查看合并文件test(发现合并出现冲突)
cat test.txt
a
b
c
d
e
f
6
7
<<<<<<< HEAD
master
=======
test1
>>>>>>> test1
2.4删除无用内容(由项目经理决定删除一个错误)
# 删除无用内容(选择保留master)
cat >test.txt<<EOF
a
b
c
d
e
f
6
7
master
EOF# 添加到缓存区git commit -m "fix test"#输出如下:
[master da71908] fix test# 查看状态
git status
#输出如下:
On branch master
nothing to commit, working tree clean
三、合并分支
3.1创建新的分支并写入内容
# 删除test1分支
git branch -d test1
#输出如下:
Deleted branch test1 (was b487be1).# 创建dev复制
git checkout -b dev
#输出如下:
Switched to a new branch 'dev'#查看当前分支
git branch
#输出如下:
* devmaster#创建test3.txt写入数据
cat >>test3.txt<<EOF
a
EOF# 添加到缓存区
git add .#提交缓存区
git commit -m "add test3 a"
#输出如下:
[dev 6b8f2d3] add test3 a1 file changed, 1 insertion(+)create mode 100644 test3.txt#接下来依次创建b,c,d,e
#b
cat >>test3.txt<<EOF
b
EOFgit add .git commit -m "add test3 b"# c
cat >>test3.txt<<EOF
c
EOFgit add .git commit -m "add test3 c"# d
cat >>test3.txt<<EOF
d
EOFgit add .git commit -m "add test3 d"# e
cat >>test3.txt<<EOF
e
EOFgit add .git commit -m "add test3 e"# 查看状态
git status
#输出如下:
On branch dev
nothing to commit, working tree clean
3.2查看提交记录
git log --pretty=oneline
#输出如下:
b52c7dfe6da151077c12c7688873457fc0f0c088 (HEAD -> dev) add test3 e
4e0f8cbe2619e07db1d52f1b1944b188657f02d6 add test3 d
c59bbd795090fb2c5c4036bed221cd0a85a8af4a add test3 c
e31105f0b4ceeb71163fb424a122b41ae389cf09 add test3 b
6b8f2d3bd6437f1a22425c9c046e70cfb88daec6 add test3 a
da719081829f9651a920c080c3a5d487528db678 (master) fix test
bc3a7c0a36d221b742e012489afc4b2c09b37c21 add master line
b487be13dd3a6a6ce9a15ab2293e1e72b4fe240a modify test a
3bd89ac560bee76f95dd1e24b4b0f381aa717601 add devtest
9116dafeb08cad8f629bc37c9a73b3e71228e687 add test2
a2c2416c43d8ec55fb122057ccffc0dee8b4ce83 remove test1.txt
d7f2588b3941ca00305462a6a2a9f1c54bb57ce0 add test1
5cfad3e86b26d22fcc991855c9c463627918bc57 add ?
fb27eaab5e47f7ac07fd6ab7f11369476a369b6a add test file
3.3合并分支(快进合并)
# 切换master分支
git checkout master
#输出如下:
Switched to branch 'master'# 查看状态
git status
#输出如下:
On branch master
nothing to commit, working tree clean# 合并分支dev
git merge dev
#输出如下:
Updating da71908..b52c7df
Fast-forwardtest3.txt | 5 +++++1 file changed, 5 insertions(+)create mode 100644 test3.txt
3.4查看合并日志
#查看合并日志(发现信息的丢失,但数据没有丢失)
git log --graph --pretty=oneline
#输出如下:
* b52c7dfe6da151077c12c7688873457fc0f0c088 (HEAD -> master, dev) add test3 e
* 4e0f8cbe2619e07db1d52f1b1944b188657f02d6 add test3 d
* c59bbd795090fb2c5c4036bed221cd0a85a8af4a add test3 c
* e31105f0b4ceeb71163fb424a122b41ae389cf09 add test3 b
* 6b8f2d3bd6437f1a22425c9c046e70cfb88daec6 add test3 a
* da719081829f9651a920c080c3a5d487528db678 fix test
|\
| * b487be13dd3a6a6ce9a15ab2293e1e72b4fe240a modify test a
* | bc3a7c0a36d221b742e012489afc4b2c09b37c21 add master line
|/
* 3bd89ac560bee76f95dd1e24b4b0f381aa717601 add devtest
* 9116dafeb08cad8f629bc37c9a73b3e71228e687 add test2
* a2c2416c43d8ec55fb122057ccffc0dee8b4ce83 remove test1.txt
* d7f2588b3941ca00305462a6a2a9f1c54bb57ce0 add test1
* 5cfad3e86b26d22fcc991855c9c463627918bc57 add ?
* fb27eaab5e47f7ac07fd6ab7f11369476a369b6a add test file
3.5创建新的分支(进行不快进合并)
# 删除dev分支
git branch -d dev
#输出如下:
Deleted branch dev (was b52c7df).#创建新分支并进入(test)
#输出如下:
git checkout -b test
Switched to a new branch 'test'#写入数据
cat >>testbranch.test<<EOF
> a
> EOF# 添加到缓存区
git add .# 提交缓存区
git commit -m "test a line"
#输出如下:
[test 3c63831] test a line1 file changed, 1 insertion(+)create mode 100644 testbranch.test#接下来还是创建b,c,d,e
cat >>testbranch.test<<EOF
b
EOFgit add .git commit -m "add test b"# c
cat >>testbranch.test<<EOF
c
EOFgit add .git commit -m "add test c"# d
cat >>testbranch.test<<EOF
d
EOFgit add .git commit -m "add test d"# e
cat >>testbranch.test<<EOF
e
EOFgit add .git commit -m "add test e"# 查看状态
git status
#输出如下:
On branch test
nothing to commit, working tree clean
3.6合并分支(不快进合并)
git checkout master
Switched to branch 'master'
git merge --no-ff -m "merge test branch" test
#输出如下:
Merge made by the 'ort' strategy.testbranch.test | 5 +++++1 file changed, 5 insertions(+)create mode 100644 testbranch.test
3.7再次查看合并日志(不快进合并)
git log --graph --pretty=oneline
#输出如下:
* ad1af6b8943afeef39d7030e4ff219d4549e61d7 (HEAD -> master) merge test branch
|\
| * ef5f6b9310b02f88276f85b98f98112d09f59111 (test) add test e
| * 2c3a8cfd62b0869e10599cf6ff1579fcfbcc715b add test d
| * c009798567a210c1cadfb62acbd345fe7ca43450 add test c
| * 35a60b09c431e09d398a4c23ec1ee6cdb553eac3 add test b
| * 3c63831f61d814b8c0bbb0f980f45c844341d33b test a line
|/
* b52c7dfe6da151077c12c7688873457fc0f0c088 add test3 e
* 4e0f8cbe2619e07db1d52f1b1944b188657f02d6 add test3 d
* c59bbd795090fb2c5c4036bed221cd0a85a8af4a add test3 c
* e31105f0b4ceeb71163fb424a122b41ae389cf09 add test3 b
* 6b8f2d3bd6437f1a22425c9c046e70cfb88daec6 add test3 a
* da719081829f9651a920c080c3a5d487528db678 fix test
|\
| * b487be13dd3a6a6ce9a15ab2293e1e72b4fe240a modify test a
* | bc3a7c0a36d221b742e012489afc4b2c09b37c21 add master line
|/
* 3bd89ac560bee76f95dd1e24b4b0f381aa717601 add devtest
* 9116dafeb08cad8f629bc37c9a73b3e71228e687 add test2
* a2c2416c43d8ec55fb122057ccffc0dee8b4ce83 remove test1.txt
* d7f2588b3941ca00305462a6a2a9f1c54bb57ce0 add test1
* 5cfad3e86b26d22fcc991855c9c463627918bc57 add ?
* fb27eaab5e47f7ac07fd6ab7f11369476a369b6a add test file
四、通过git上传代码到gitee(公有仓库)
官网地址:https://gitee.com/
首先进入先创建账号,在进行如下步骤:
4.1创建新的仓库
4.2生成公钥进行上传
# 生成公钥
ssh-keygen -t rsa
#输出如下:
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:0Uba4UBbprdBbDwDpMr9SkctomVfnN6JQLEomtf/CEE root@git01
The key's randomart image is:
+---[RSA 2048]----+
| o*+* |
| o /*. |
| . E B.Bo |
| + * . * + |
| o + B S * |
| . + B = o . |
| . o = o o |
| . + o |
| . . . |
+----[SHA256]-----+#查看公钥段(进行上传)
cat /root/.ssh/id_rsa.pub
#输出如下:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+peONJ63yFzsBBsZ6Pd+NDlBl91cE+Vd3P5JtYhLw/EwKIMpe6gpvGlJZwTkAdW0BE/HyVj7miibgspn/imhSfXRpj0ZvohVXaLFn7FNsYjyhiKSY0mHT/um/FM1wekwWILcBdRMYPkBgL9t0nGfgoROWsCGHgNAlRh+FT1lCQJmID/Vxq4G4j1bvxw2IMfA8lEzPTLzFkhwwFTfMs+nh09CsIA0QL2I5AQaGNJ2Vy/eWV1hlLIDHzYaAX3eiO56oifMXbB7zBJA2qSGzCsKxSNIRJ0d9ogLXCzi4PfC2K8afcb2UzCEMMSWEmUzkuZIsVMMDf8TTELvGFrx9ulOD root@git01
4.3上传gitee公钥步骤
4.4创建 git 仓库
# 创建仓库并进入
mkdir laowang250514_learning
cd laowang250514_learning#初始化一个新仓库
git init
#输出如下:
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
Initialized empty Git repository in /root/laowang250514_learning/.git/
4.4写入文件
# 在仓库自定义写入一个文件
echo "今天天气不错" >> laowang.txt# 添加到缓存区
git add laowang.txt# 提交缓存区
git commit -m "first commit"
#输出如下:
[master (root-commit) 40981dd] first commit1 file changed, 1 insertion(+)create mode 100644 laowang.txt
4.5添加并推送
# 添加远程仓库
git remote add origin git@gitee.com:laowang_Star/laowang250514_learning.git#推送本地分支到远程
git push -u origin "master"
#输出如下:
The authenticity of host 'gitee.com (180.76.198.225)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
ECDSA key fingerprint is MD5:27:e5:d3:f7:2a:9e:eb:6c:93:cd:1f:c1:47:a3:54:b1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitee.com,180.76.198.225' (ECDSA) to the list of known hosts.
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 224 bytes | 224.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 9d434093
To gitee.com:laowang_Star/laowang250514_learning.git* [new branch] master -> master
branch 'master' set up to track 'origin/master'.