目录
[1 引言](#1 引言)
[2 直接整理一个常用的流程,而不是死记硬背各种命令](#2 直接整理一个常用的流程,而不是死记硬背各种命令)
[3 解决冲突的说明和理解](#3 解决冲突的说明和理解)
[4 git fetch的说明和理解](#4 git fetch的说明和理解)
[5 真正开发不用Git命令,而是使用VSCode插件管理工程](#5 真正开发不用Git命令,而是使用VSCode插件管理工程)
1 引言
以前主要用svn,Git用的少,这次再复习一下Git命令。
2 直接整理一个常用的流程,而不是死记硬背各种命令
bash
1. 进入项目目录
# 如果是第一次下载项目
git clone 仓库地址.git
cd 项目目录
# 如果不是第一次,直接进入目录
cd 项目目录
git config user.name "cumtchw" #不要加--global,
git config user.email "[email protected]" #不要加--global
#不要加--global以免影响全局,不加--global就相当于只在当前.git/config文件中增加了下面的内容,
[user]
name = cumtchw
eamil = xxxx.com
2. 查看 / 操作本地分支
git branch # 查看本地分支
git checkout [branch_name] # 切换到已有分支
git branch [branch_name] # 创建本地分支 基于当前分支的最新提交,创建一个新的本地分支,但不自动切换到这个新分支
git checkout -b [branch_name] # 创建并切换分支 基于当前所在的分支创建一个新分支 feature1,并切换到它
3. 切换到主分支并拉取最新代码(确保干净)
git checkout main
git pull
4. 新建功能分支(feature 名可以自由取)
git checkout -b feature-add-xxx
5. 修改代码(新增、修改或删除)
6. 保存并提交改动
git add .
git status # commit之前最好执行下git status查看当前文件差异状态
git commit -m "feat: 修改了某某功能"
7. 如需解决冲突(主分支有更新、你的开发周期较长时)
# 7.1 回到主分支并拉最新代码
git checkout main#这一行一定不能省,否则如果当前在feature分支,那么下面的git merge origin/main是直接把/origin/main给合并到当前分支了。
git fetch origin
git merge origin/main
# 7.2 切换回你的开发分支
git checkout feature-add-xxx
# 7.3 将主分支合并进来,触发冲突则解决
git merge main
8. 查看状态、提交修改
git add .
git status # commit之前最好执行下git status查看当前文件差异状态
git commit -m "修复登录界面崩溃 bug"
#git push <远程主机名> <本地分支名>:<远程分支名>
9. 推送到远程仓库
# 推送本地 feature-add-xxx 到远程同名分支:把我本地的 feature-add-xxx 分支,推送到远程仓库 origin 中去,并让远程也建立一个叫 feature-add-xxx 的分支。
git push origin feature-add-xxx
10. 登录 GitLab / GitHub 网页提交 Merge Request
3 解决冲突的说明和理解
bash
Git解决代码冲突
1:将本地分支切换到本地默认主分支:
git checkout [master|develop]
2:更新本地默认主分支
git pull [master|develop]
3:切换到提交代码本地分支
git checkout [branch_name]
4:将本地主分支merge 到当前分支, 此时提示冲突文件
git merge [master|develop]
5:本地解决冲突文件,验证。
6:Git提交代码流程,push到远程分支
问ChatGPT:
这个是不是说,比如我本来git clone了主分支,然后好几个人都创建了自己的分支然后修改代码,
然后可能我改的时间太久了,别人已经有人commit以及push并且merge到master了,
然后这时候我要是commit push merge肯定有冲突,所以我先不commit,我先直接在本地先merge解决冲突,
解决完之后,我再commit push以及申请merge,是这个意思吗,
下面是ChatGPT的理解:
完全正确!你理解得非常到位,这就是这套流程的核心含义,简单总结一下:
你的理解流程细化版
起点:你从远程仓库clone了代码,基于主分支(master或develop)新建了自己的功能分支,开始开发。
多人并行开发:别人也基于主分支做了自己的开发,提交(commit)并推送(push)到远程,且已经有人把代码合并(merge)回了主分支。
你的分支落后了:此时远程主分支比你本地主分支"更新",也就是说远程主分支已经有了你本地功能分支没有的代码。
直接提交可能冲突:如果你直接把你本地的功能分支代码提交(commit)并推送(push),然后申请合并(merge request),很可能远程主分支与功能分支代码有冲突,合并失败。
提前合并解决冲突:
先切回本地主分支,拉取最新远程主分支代码
git checkout master && git pull origin master
切回你的功能分支
git checkout feature-xxx
把最新主分支合并进功能分支
git merge master
如果有冲突,在本地解决冲突,测试确认无误
提交合并结果
git commit
推送功能分支
git push origin feature-xxx
申请合并请求:这时你发起合并请求,远程主分支基本不会再出现冲突,可以顺利合并。
4 git fetch的说明和理解
bash
git checkout main #一定要有这一步
git fetch origin
git merge origin/main
解释:
git checkout main
切换到本地的主分支
main
,确保后续操作都是基于主分支进行。
git fetch origin
从远程仓库
origin
拉取所有分支的最新信息,包括代码提交、标签等,但不会自动合并到任何本地分支 。换句话说,这一步相当于把远程仓库的最新状态完整下载到本地,并更新远程跟踪分支(如
origin/main
、origin/feature-xxx
等),但不会直接修改你当前所在的本地分支。这使得你可以安全地查看远程变化,决定后续如何合并,避免直接自动合并带来的风险。
git merge origin/main
将刚才
fetch
下来的远程主分支origin/main
的最新代码,合并到当前的本地main
分支,使你的本地代码更新到远程最新状态。如果远程和本地存在冲突,会在这里提示解决。
**注意事项:**但是这里要注意要提前git checkout main,如果没有这一行只有第二第三行,那么假如原来是在本地的feature1分支,那么执行完2 3 行,相当于把远程的main分支合并到本地的feature1里面了。
上面那三行和下面这两行的区别
git checkout main
git pull
git pull
是git fetch + git merge
的快捷命令
git pull
实际上相当于先执行git fetch
,把远程仓库最新内容拉下来,更新远程追踪分支(比如origin/main
)然后自动执行一次
git merge origin/main
,把远程的更新合并到当前分支(这里是main
)
- 区别在于执行的步骤是否分开
用
git fetch
+git merge
可以分两步清晰控制:
先用
git fetch origin
拉取所有远程分支最新信息,但不修改当前分支然后再决定是否以及什么时候合并
origin/main
到本地main
git pull
是一步完成拉取和合并,自动执行合并,不能中间检查远程变化
- 什么时候用哪个更好?
如果你想对远程变化先有个全面了解,或想手动处理合并,避免自动合并导致冲突或意外,推荐先用
bash
复制编辑
git fetch origin git merge origin/main
如果你只是想快速同步本地分支到远程最新状态,且信任远程内容,
git pull
更方便快捷
5 真正开发不用Git命令,而是使用VSCode插件管理工程
真正开发的时候不需要敲命令,直接用vscode里面的source control管理工程,进行pull,push,merge以及冲突解决等这些操作。但是前面介绍的这些命令要了解,还有整个流程要理解。
