分支管理和合并
几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
- 建立分支
# 建立文件
mkdir git_repo && cd git_repo
# 初始化仓库
git init
# 建立文件,写入数据
touch war.txt && echo 'master commit fist row' > war.txt
# 提交到暂存区
git add war.txt
# 提交到版本库
git commit -m '第一次提交'
============================
[master (root-commit) b29e24e] 第一次提交
1 file changed, 1 insertion(+)
create mode 100644 war.txt
============================
#建立分支
git branch bra_1
# 切换分支
git checkout bra_1
- 在分支里修改数据
cat war.txt
=========================
master commit fist row
=========================
echo 'echo bra_1 branch' >> war.txt && cat war.txt
=========================
master commit fist row
echo bra_1 branch
=========================
# 提交---很重要
git add war.txt && git commit -m "bra_1分支第一次提交"
=========================
[bra_1 6dfe849] bra_1分支第一次提交
1 file changed, 2 insertions(+), 1 deletion(-)
=========================
- 求换到master分支进行修改数据,修改地方相同
git checkout master
cat war.txt
=========================
master commit fist row
========================
echo 'echo master branch' >> war.txt && cat war.txt
=========================
master commit fist row
echo master branch
=========================
# 提交
git add war.txt && git commit -m "master分支第二次提交[在bra_1后的第一次提交]"
=========================
[master 7675653] master分支第二次提交[在bra_1后的第一次提交]
1 file changed, 2 insertions(+), 1 deletion(-)
=========================
- 合并分支
# 查看分支
git branch
=========================
bra_1
* master
=========================
# 合并分支,bra_1合并到master 会产生冲突
git merge bra_1
=========================
Auto-merging war.txt
CONFLICT (content): Merge conflict in war.txt
Automatic merge failed; fix conflicts and then commit the result.
=========================
- 产生冲突,手动修改冲突,再合并
cat war.txt
=========================
master commit fist row
<<<<<<< HEAD
echo master branch
=======
echo bra_1 branch
>>>>>>> bra_1
=========================
git diff master bra_1
=========================
diff --git a/war.txt b/war.txt
index b5c0ea3..deaf61d 100644
--- a/war.txt
+++ b/war.txt
@@ -1,2 +1,2 @@
master commit fist row
-echo master branch
\ No newline at end of file
+echo bra_1 branch
\ No newline at end of file
=========================
手动修改冲突,直接add,然后commit
git merge bra_1
=========================
Already up to date.
=========================
git add war.txt && git commit -m "master分支第二次提交[在bra_1后的第一次提交]"
=========================
On branch master
nothing to commit, working tree clean
=========================
推送到远程仓库
ssh提交
ssh-keygen -t rsa -C "邮件号"
ssh-keygen -t rsa -C "邮件号"
- 在路径:
C:\Users\用户\.ssh找到 id_rsa.pub文件,打开复制公钥 - 在gitee平台添加公钥
- 添加远程仓库,拉取,推送,第一次先拉取同步
git remote add <远程仓库名称> <ssh地址>
git remote -v
git pull <远程仓库名称> <远程仓库分支名> --allow-unrelated-histories
git push <远程仓库名称> <本地分支名>:<远程仓库分支名称>
# <本地分支名>:<远程仓库分支名称> 如果名字一样,就不用分开写,写一个就行
https提交
git config --global credential.helper store :使密码只输入一次
git remote add <远程仓库名称> <https地址>
git pull <远程仓库名称> <远程仓库分支名> --allow-unrelated-histories
git push -u <远程仓库名称> <本地分支名称>:<远程仓库分支名称>
输入邮箱号和密码:只需输入一次
中文显示为数字
git config --global core.quotepath false
#界面编码格式
git config --global gui.encoding utf-8
#文件提交编码格式
git config --global i18n.commitencoding utf-8
#LOG输出的编码格式
git config --global i18n.logoutputencoding utf-8
切换版本
三种参数的区别(非常重要):
| 参数 | 效果说明 | 适用场景 |
|---|---|---|
--hard | 彻底回退。代码库、暂存区、工作区全部变成指定版本的样子。指定版本之后的所有修改都会丢失。 | 确定之后的代码都不要了,想完全回到过去。 |
--soft | 保留修改。代码库回退,但你之后的修改会保留在“暂存区” | 代码写错了想撤销 commit,但想保留代码内容重新提交。 |
--mixed | 保留文件但取消暂存(默认参数)。代码库回退,修改保留在工作区,但处于“未暂存”状态。 | 想撤销 commit 和 add,重新整理代码后再提交。 |
cat war.txt
# v5是在工作区
===================
v1
v2
v3
v4
v5
===================
# 查看commitID
git log
# 切换到指定版本
git reset --hard <v2commitID>
cat war.txt
===================
v1
v2
===================
# 回退到切换前版本
git reset --hard <v4commitID>
cat war.txt
# v5是丢失
===================
v1
v2
v3
v4
===================
cat war.txt
# v5是在工作区
===================
v1
v2
v3
v4
v5
===================
# 查看commitID
git log
# 切换到指定版本
git reset --soft <v2commitID>
cat war.txt
# 啥也没有丢失
===================
v1
v2
v3
v4
v5
===================
# 回退到切换前版本
git reset --soft <v4commitID>
cat war.txt
# v5是未丢失
===================
v1
v2
v3
v4
v5
===================