git常用操作

142 阅读5分钟

避免产生 “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.nameuser.email这两个配置项

3、生成SSH密钥

ssh-keygen -t rsa -b 4096 -C "邮箱"

4、查看并复制公钥内容

cat ~/.ssh/id_rsa.pub

5、Gitlab 中添加 SSH 密钥

  1. Gitlab ➡️ 编辑个人资料 ➡️ SSH密钥 ➡️ 添加新密钥
  2. 将复制的公钥粘贴到输入框并直接保存

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 "..."' 提交信息)
    • 开发分支本地保留了修改后的代码(暂存状态)