代码管理

149 阅读8分钟

一般都在test或dev 开发分支上提交自己代码,代码和别人冲突需要解决代码冲突。

一个项目两个人前端,一人负责一个页面,一般就一个dev分支,上传自己的代码,冲突比较少。

一个项目多个前端,一人负责多个模块,或修改多个bug,一般拉取的test分支,自己会在创建一个自己单独分支,没有问题之后在合并test。

正常情况下切换 Git 分支时,编辑器中的代码会跟着切换为当前分支对应的版本。

Git 分支本质是不同的代码版本线,切换分支时,Git 会将工作区(编辑器加载的文件)的内容替换为目标分支的代码文件状态,所以编辑器里显示的代码会同步变化。

1.克隆代码到本地

克隆前需确保本地已安装 Git(可通过 git --version 检查,未安装需先下载安装)

16dc84b8-e1ce-42b0-bc76-a5b5a3f99915.png

不要直接下载ZIP之类的包,可以下载代码使用,但是后期拉取,提交代码无法进行操作。

需要有git文件

d8cae6f9-c282-49ff-a6cb-b7b7f3ec05dc.png

在自己创建的项目文件夹中使用命令工具操作

b0bc44d9-9a1d-4f39-a488-ef83a9ea4cc3.png

git clone  <远程仓库地址> 

938170ce-2036-4f25-9af0-25aa53e20e50.png

选择HTTP地址链接

git clone github.com/username/re…

克隆成功后,代码就拉到项目文件夹了

2.将本地代码导入 Sourcetree(初始化本地仓库)

  • 打开 Sourcetree,点击左上角 文件(File)→ 新建仓库(New Repository)

  • 在弹出的窗口中:

    • 源路径(Source Path) :选择你本地代码所在的文件夹。
    • 仓库类型:默认选择 Git
    • 勾选 创建仓库时初始化(Initialize this repository with a README)
    • 点击 创建(Create) ,此时本地代码文件夹会被初始化为 Git 仓库(生成 .git 隐藏目录)
  • 推送失败提示 “无权限” :检查远程仓库地址是否正确,或账号是否有读写权限(HTTPS 需输入正确账号密码,SSH 需配置公钥到远程)。

  • 远程仓库已有文件冲突:首次推送前,若远程仓库有初始化文件(如 README、LICENSE),需先执行 拉取(Pull)  合并远程代码,再推送。

21c41f58-c6c7-4d19-8278-5dbf5584dc57.png

3.使用可视化工具拉取,提交代码

0a4d1e14-8e9a-4a9c-a682-baff82e2f455.png

11b73dc6-592f-4e18-84db-3888a7148ab0.png

每天拉取下最新代码再进行开发,提交代码前再拉取下代码,然后进行提交。

先创建自己分支,避免与其他人发生代码冲突。 69b2ba63-eeac-4d22-8f42-30c55ea9de42.png

新建结果显示,切换到自己分支

1ddbd1b4-fa61-4e00-bb29-e41940d62ae5.png

这只是在本地建了一个分支,并未同步到远程git上。 9eaf339a-cea4-414f-9b4e-c62d80d527e9.png

进行推送,同步到远程仓库。创建好不要先拉取代码,先推送上去。 af621547-faed-4c82-932f-800aa8884109.png

提交自己写的功能模块代码

f513dba8-e987-435f-8bab-43c9dec41316.png 选择需要提交的文件

8162e590-48b4-4eda-b4c2-3d3d9bc4e36f.png

在下方的 提交信息(Commit message)  输入框中,填写本次提交的描述(例如 “修复 XX 功能 bug”)

点击 提交(Commit)  按钮,将代码提交到本地分支。

点击远端,打开远程仓库

0e022754-4045-4138-afd8-2843e28fcb68.png

ead800a7-c8b8-4f97-bcae-4ec868621e21.png

点击命令行,弹出命令框,输入命令进行操作

565c5a4c-1c2c-4bf8-b65f-167604197b01.png

4.报错内容:

1.git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks checkout main --progress src/views/index.vue: needs merge error: you need to resolve your current index first

错误提示你当前的工作区存在未解决的合并冲突(needs merge),因此无法直接切换到 main 分支。需要先解决这些冲突

打开冲突文件(即上述 index.vue),寻找冲突标记(<<<<<<< HEAD=======>>>>>>> 分支名),手动编辑文件保留正确内容,删除冲突标记。

例如:

vue

<<<<<<< HEAD
// 当前分支的代码
=======
// 待合并分支的代码
>>>>>>> some-branch

编辑后保存文件。

标记为已解决并提交

解决冲突后,将文件标记为已解决:

bash

git add src/views/index.vue

然后完成合并提交(如果是在合并过程中产生的冲突):

bash

git commit -m "解决合并冲突"

2.git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks branch -D gt error: cannot delete branch 'gt' used by worktree at 'D:/xiangmu/cc'

当要删除一个分支时,报错删除的分支xx正在被一个工作区(worktree)使用,具体路径是 D:/xiangmu/cc。Git 不允许删除被工作区引用的分支,以避免数据丢失。

先进入 `D:/xiangmu/cc` 目录,将主工作区切换到非xx 的分支(比如 `main` 或 `master`):

bash

```
cd D:/xiangmu/cc
git checkout main  # 切换到一个存在的其他分支
```



回到任意工作区,删除 `gt` 分支

```
git branch -D xx
```

3.git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks fetch --prune --no-tags origin remote: Verify fatal: Authentication failed for 'xxxxxxxx.git/' warning: use of unencrypted HTTP remote URLs is not recommended; see https://xxxx for more information. From http://xxxx a01ebd50..4aea0e8a test -> origin/test b747baf0..920d5f23 test-ww -> origin/test-wtest-yl2 -> locks pull origin test From http://xxxx * branch test -> FETCH_HEAD warning: in the working copy of ''src/views/Bndex.vue', LF will be replaced by CRLF the next time Git touches it error: Your local changes to the following files would be overwritten by merge: src/views/index.vue Merge with strategy ort failed.

拉取代码时,当本地文件有修改,且远程同文件也有更新时

解决方式: 用 stash 将本地修改暂存起来,让工作区回到 “干净” 状态:

git stash save "暂存本地修改:/index.vue"

在拉取代码,此时工作区无本地修改,可以正常拉取远程更新:

bash

git pull origin test

  • 拉取优先:提交前必须拉取(Pull)最新代码,确保本地分支与远程同步,减少冲突概率。
  • 冲突处理:若拉取后出现冲突(文件显示为红色 “冲突” 标记),需先在 “工作副本” 中打开冲突文件,手动编辑解决冲突(保留正确代码,删除冲突标记 <<<<<<< ======= >>>>>>>),然后重新暂存、提交、推送。
  • 分支隔离:确保在正确的分支提交,避免误提交到其他分支(如 main/master 分支)。

5.需要拉取组件库

如:主项目root已克隆到Sourcetree,现在需要克隆组件库放在主目录下,步骤如下:

企业微信截图_17605980656261.png

1.新建一个Clone,仓库类型这一栏是远程线上的git项目地址xxxxx.git.

2.下面框是本地项目地址,将你需要放入的组件,先创建一个新的文件夹,里面必须是空的。 如:root\src 下面要放组件库MH_Components,先建立一个空文件夹,然后选这个文件夹地址。

3.最后一个框就写MH_Components 你这个组件库名字。

4.点击克隆之后等待代码拉取成功,不用担心下载的代码会再生成一个MH_Components文件夹,代码会直接拉取到你建立的MH_Components文件夹中

5.建立分支,拉取代码之后,将自己分支推送到线上,后面就可以开发了,把自己写的代码写完推送。 企业微信截图_17605985572170.png

企业微信截图_17605985962331.png

6.每天拉取下代码,有代码冲突解决下,继续开发,后面推送到分支上。

6.命令行

执行以下命令,将本地未提交的修改暂时存储起来。它会显示工作区的状态,其中包括冲突文件列表

git stash

安全拉取远程更新,因为本地冲突文件已被暂存

git pull origin dev

恢复暂存的本地修改并解决冲突.将之前暂存的修改恢复到工作区:

git stash pop

手动编辑保留需要的代码,删除冲突标记(<<<<<<<=======>>>>>>>

<<<<<<< Updated upstream  # 远程分支的代码
...
=======
...                       # 你的本地修改
>>>>>>> Stashed changes

保存文件后,标记为已解决冲突

git add src/views/index.vue

冲突解决后,提交合并后的代码

git commit -m "合并远程分支,并解决冲突"

企业微信截图_17609217052349.png Git 的合并提交信息编辑界面(默认使用 Vim 编辑器),需要填写合并提交的说明后完成提交,或取消合并

  1. 进入编辑模式:按键盘上的 i 键(小写),进入 Vim 的插入模式(左下角会显示 -- INSERT --)。

  2. 填写提交信息:在编辑区域输入合并的原因,例如:

    plaintext

    Merge branch 'test' to resolve conflicts
    

    (可根据实际合并目的填写,也可保留默认提示信息)

    1. 保存并退出

    • 按 Esc 键退出插入模式(左下角 -- INSERT -- 消失)。

    • 输入 :wq(冒号 + wq,小写),然后按回车键。

      • w:保存文件;q:退出编辑器。

取消合并(放弃本次合并)

如果不想提交这次合并,可直接退出且不保存:

  1. 按 Esc 键确保退出插入模式。

  2. 输入 :q!(冒号 + q!,小写),然后按回车键。

    • q!:强制退出且不保存修改,会取消本次合并操作。

一套流程:

先将本地修改暂存,拉取远程代码后,再恢复暂存的修改并解决冲突

# 暂存本地修改
git stash

# 拉取远程 test 分支最新代码
git pull origin test

# 恢复暂存的修改(此时可能需要解决冲突)
git stash pop

# 解决冲突后,提交合并结果
git add .
git commit -m "合并远程test分支并解决冲突"

提交本地修改后合并,若本地修改需保留且可独立提交,先提交再拉取:

# 提交本地修改
git add src/views/xxxx
git commit -m "本地修改:xxx功能"

# 拉取远程代码(可能需要解决冲突)
git pull origin test

# 解决冲突后再次提交
git add .
git commit -m "合并远程test分支"

创建一个分支用于发布线上版本测试用

当线上代码仓库有测试分支,那么为了防止提交或发布研发代码。本地建立测试分支,进行发布测试代码。

企业微信截图_17648337167683.png

新建分支:标注好测试分支名称

企业微信截图_17648338819768.png

切换到测试分支,获取下

企业微信截图_1764833966930.png

点开远程也就是线上

企业微信截图_17648340429592.png

选中测试分支右击 选择检出 test分支

企业微信截图_17648339443165.png

会多出一个分支

企业微信截图_17648342208346.png

切回刚才开始创建的测试分支,切到测试分支之后,点击刚才检出生成的分支test,右击选中合并test至当前分支。这样test线上分支代码拉取下拉,就可以打包发布了。