避免产生 “Merge branch 'master' of...” 提交信息的方法:
在执行 commit 之前,先 pull 拉取远程分支代码。(也就是:先执行 pull,后 commit)
一、推送代码到远程仓库(origin)
方法一:
1. 可以先创建一个新分支来测试合并
git checkout -b test-merge // 创建并切换到test-merge分支
2. 提交本地工作区的修改到本地仓库
git add . // 将工作区所有文件添加到暂存区
git commit -m"feat:变更信息" // 将暂存区文件提交到本地仓库,本地仓库会存储历史提交(commit)版本
需要注意的是,在git commit -m""之前,可以多次git add .(添加到暂存区),但是git commit命令会将之前存放在暂存区的全部文件一次性全部提交到本地仓库,且只有一个提交信息。
sequenceDiagram
工作区->>暂存区: git add .
暂存区-->>工作区: git restore
暂存区->>本地仓库区: git commit -m"提交信息"
本地仓库区->>远程仓库: git push origin 远程分支
远程仓库-->>工作区: git pull origin 远程分支
- 其中,工作区、暂存区、本地仓库区都属于本地仓库,而暂存区和本地仓库区都属于版本区。
3. 获取远程仓库中分支的最新代码
git fetch origin 远程分支名字
4. 合并前验证
4.1 对比本地当前分支与远程分支代码的差异
git diff HEAD origin/远程分支名字
4.2 查看将要合并的提交列表
git log HEAD..origin/远程分支名字 --oneline
5. 将远程分支代码合并到本地
git merge origin/远程分支名字 //不要要重新提交信息,直接:wq退出编辑
执行该条命令后会在远程仓库的提交记录中显示:Merge remote-tracking branch 'origin/远程分支名字' into 当前本地分支,表示将远程跟踪分支更新到本地当前分支,其中origin/远程分支名字指的是远程仓库(origin)中远程分支名字的本地副本(即远程跟踪分支)。
6. 处理冲突
若合并完代码存在冲突,则手动处理冲突。
7. 处理完冲突再次提交修改到本地仓库,并再次拉取最新代码确保没有新的冲突,然后合并
git add . // 将工作区所有文件添加到暂存区
git commit -m"feat:变更信息" // 将暂存区文件提交到本地仓库
git pull origin 远程分支名字 // 直接拉取远程分支并合并到当前分支,相当于fetch + merge
8. 合并后验证
若执行完步骤5不存在冲突,或已经执行完步骤7,则可以执行该步骤。
git log --graph --oneline --all # 查看合并后的提交图
9. 推送本地仓库代码到远程仓库
git push origin HEAD:远程分支名字 // 推送当前分支合并结果到远程仓库
git push origin 本地分支名字:远程分支名字
方法二:
1. 提交本地分支工作区的修改到本地仓库
git add . // 将工作区所有文件添加到暂存区
git commit -m"feat:提交信息" // 将暂存区文件提交到本地仓库,本地仓库会存储历史提交(commit)版本
编写完代码后在本地分支中提交。
2. 在本地切换到目标远程分支
git checkout 远程分支名字
eg:git checkout feature/smart-creation
3. 从远程仓库拉取最新代码(为了避免冲突,可选)
git pull origin 远程分支名字
4. 合并本地分支
git merge 本地分支名字 // 将本地分支合并到目标远程分支
- 执行该条命令后会在远程仓库的提交记录中显示:
Merge branch '本地分支名字' into 远程分支名字,表示将指定本地分支的代码合并到了远程分支(没有远程跟踪分支)。 - 若本来就在远程分支中直接提交代码(即本地分支名字=远程分支名字),则没有该条提交记录。
5. 若有冲突,手动解决冲突,并重新提交
git add . // 将工作区所有文件添加到暂存区
git commit -m"feat:提交信息" // 将暂存区文件提交到本地仓库,本地仓库会存储历史提交(commit)版本
6. 推送到远程仓库
若执行完步骤4不存在冲突,或已经执行完步骤5,则可以执行该步骤。
git push origin 远程分支名字
二、VS Code 链接/绑定 Gitlab
1、打开终端,配置 Git
git config --global user.name "用户名"
git config --global user.email "邮箱"
2、检查是否配置成功
git config --list
- 查看配置项中是否有
user.name和user.email这两个配置项
3、生成SSH密钥
ssh-keygen -t rsa -b 4096 -C "邮箱"
4、查看并复制公钥内容
cat ~/.ssh/id_rsa.pub
5、Gitlab 中添加 SSH 密钥
- Gitlab ➡️ 编辑个人资料 ➡️ SSH密钥 ➡️ 添加新密钥
- 将复制的公钥粘贴到输入框并直接保存
6、测试连接
git pull
三、Git暂时存储未提交的修改
- 作用:用于暂时存储某些未提交的修改,以便在切换到其他分支时保持工作区和本地仓库干净
git stash // 暂存更改(暂存后可成功切换到其他分支)
git stash pop // 恢复已暂存的更改(恢复最近一次存储的stash;恢复后会从stash列表移除)
git stash pop stash@{2} // 恢复指定的stash
git stash list // 查看所有stash项
四、Git回滚master代码
- 作用:master回滚后,开发分支的代码没有了。若此时再把master合并到已经修改完的开发分支,则代码会消失(即修改后的代码也不见了)
// 1、gitlab上发送 mr,即 master 回滚请求
// 回滚后,生成'Revert "....."'提交信息
// 2、合并 master 代码到开发分支
git merge master // 开发分支
// 3、在开发分支上,撤销某次 merge 合并
git revert -m 1 [提交版本号] // 填写 Revert "....." 提交的版本号
- 效果:
- master 分支生成 'Revert "..."' 提交信息
- 开发分支与 master 分支对齐(也有 'Revert "..."' 提交信息)
- 开发分支本地保留了修改后的代码(暂存状态)