git 多人协作
blog
本文字数:1.2k 字 | 阅读时长 ≈ 5 min

git 多人协作

blog
本文字数:1.2k 字 | 阅读时长 ≈ 5 min

Git 多人协作指南

在和其他人进行协作之前,你和其他人都要有这个仓库的修改/提交等权限。也就是说需要提前配置用户信息,ssh 密钥等信息,这里不做赘述,直接说操作

1. 创建并查看分支

多人协作一般来说有多个分支,其中一个 master 为主分支,多个人共同维护这一个大版本。随后每个人都有一个子分支,用来各自的开发任务,这里一一讲解各个命令

如下所示,我们随机找了一个仓库,可以看到当前本地分支有两个 ahuimaster,远程分支有多个,表示其他人同时也有自己的进度,等进度完成后向 master 分支提交他们的版本

[root@etao-jqb011166008151.na131 /ssd/1/wangyh/TBStarsViT]
#git branch
* ahui
  master
(base) 
[root@etao-jqb011166008151.na131 /ssd/1/wangyh/TBStarsViT]
#git branch -r
  origin/HEAD -> origin/master
  origin/ahui
  origin/master
  origin/ruoze_dev
  origin/yaqi
  origin/yaqi_eval_0728
(base) 
[root@etao-jqb011166008151.na131 /ssd/1/wangyh/TBStarsViT]
#git branch -a
* ahui
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/ahui
  remotes/origin/master
  remotes/origin/ruoze_dev
  remotes/origin/yaqi
  remotes/origin/yaqi_eval_0728
(base) 
[root@etao-jqb011166008151.na131 /ssd/1/wangyh/TBStarsViT]
# 

2. 用远程分支来更新当前分支

假设有人更新了自己的分支,并将其提交到 master 分支了,现在我们想将 master 分支拉到本地 ahui 分支,该怎么做?首先更新 master 分支,要确保本地的 master 分支是最新的,然后才能将其合并到 ahui 分支。

  1. 更新本地 master 分支:git fetch origin
  2. master 合并到 ahuigit merge origin/master

2.1 如果 master 分支和本地无冲突

如果远程 master 分支和本地 ahui 分支没有冲突,那么合并操作会自动完成,直接将 master 分支的最新提交合并到 ahui 分支,执行状态如下

[root@etao-jqb011166008151.na131 /ssd/1/wangyh/TBStarsViT]
#git fetch origin
remote: Enumerating objects: 86, done.
remote: Counting objects: 100% (86/86), done.
remote: Total 86 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (86/86), done.
From http://gitlab.alibaba-inc.com/future-lab-stars/TBStarsViT
   adef02a..38b8cd1  master     -> origin/master
   ca16a75..5095583  yaqi       -> origin/yaqi
(base) 
[root@etao-jqb011166008151.na131 /ssd/1/wangyh/TBStarsViT]
#git merge origin/master
Updating 621951e..38b8cd1
Fast-forward
 clip_benchmark/cli.py                        | 31 +++++++++++++++++++++++++++++--
 clip_benchmark/datasets/imagenet1k_custom.py |  3 ++-
 clip_benchmark/metrics/linear_probe.py       |  8 ++++++--
 dataset/image_processing_qwen2_vl.py         | 27 +++++++++++++++++++++++++++
 models/clip_wrapper.py                       |  4 ++--
 models/mim_model/qwen2_5vl_mim.py            | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------
 pretrain_engine.py                           | 13 +++++++++----
 scripts/evaluate_linear_probing.sh           | 16 +++++++++-------
 scripts/submit_amd_eval.sh                   | 22 ++++++++++++----------
 scripts/submit_eval.sh                       | 32 +++++++++++++++++++++++---------
 stage1_siglip_2_qwenvl.py                    |  5 +++--
 utils/arguments.py                           |  5 ++++-
 utils/optim_factory.py                       |  2 ++
 utils/utils.py                               | 35 +++++++++++++++++++++++++++--------
 14 files changed, 234 insertions(+), 59 deletions(-)

3. 如果你们没有分支,都在 master 上操作

这里直接上例子

3.1 用远程分支更新本地

# 确保本地分支与远程同步
git fetch origin

# 切换为 master 分支
git checkout master                   

# 拉取并合并远程的 master 分支
git pull origin master

3.2 用远程分支更新本地(有冲突)

如果远程分支更新本地的时候存在冲突,并且你想丢弃本地的冲突

强制将远程分支的代码同步到本地分支

  1. 放弃本地所有未提交的更改
    首先,确保你的任何本地改动都已经被放弃(如果有未提交的文件,你可以使用 git stash 暂存它们或者 git reset 将它们放弃)。运行以下命令,丢弃所有本地未提交的变动:
git reset --hard

这会清除你当前的分支状态(未提交内容、已暂存但是未提交的内容都会被移除)。

  1. 强制让本地分支与远程分支对齐
    执行以下命令,获取最新的远程分支并覆盖本地分支的内容:
git fetch origin
git reset --hard origin/master
  1. 删除已经修改但未被跟踪的文件(可选)
    如果你的本地仓库有一些修改过或新创建但未被 Git 跟踪的文件,执行 reset 后这些文件依然会保留。如果想清理掉这些文件,执行以下命令:
git clean -fd

注意事项

  1. 本地未提交的变更将永远丢失。强制同步会覆盖所有本地的变更,因此在执行这些命令之前请确保你不需要保留这些更改。

  2. 如果对你的本地改变犹豫不决,可以使用以下命令保存当前的改动到 Git 暂存区(以便日后恢复):

    git stash
    
  3. 如果你想确保后续每次拉取时都覆盖本地代码,可以使用强制拉取方式,仅保留远程代码:

    git fetch origin
    git reset --hard origin/master
    
8月 26, 2025