news 2026/4/23 18:38:32

git 常用操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
git 常用操作

1.首先判断项目结构

情况1:单一仓库,多模块(Monorepo)

project/ ├── app/ # 主模块 ├── library1/ # 子模块 ├── library2/ # 子模块 └── build.gradle # 统一构建

操作:在根目录操作即可,Git 会自动管理所有子文件夹。

情况2:多个独立仓库

project/ ├── app/ # 独立 Git 仓库 ├── sdk/ # 独立 Git 仓库 └── docs/ # 独立 Git 仓库

操作:需要分别进入每个文件夹操作。

2.快速判断方法

# 在项目根目录查看ls-la# 如果有 .git 文件夹,是单一仓库# 如果每个子文件夹都有 .git,是多仓库# 或者使用 git 命令cdprojectgitstatus# 如果成功,是单一仓库cdproject/appgitstatus# 如果成功,说明 app 是独立仓库

3.切换分支的完整流程

对于单一仓库:

# 1. 进入项目根目录cd/path/to/project# 2. 查看当前分支gitbranch# 查看本地分支gitbranch -r# 查看远程分支gitbranch -a# 查看所有分支# 3. 切换分支gitcheckout develop# 切换到已存在的分支gitcheckout -b feature/new-branch# 创建并切换到新分支# 4. 拉取最新代码gitpull origin develop# 5. 查看状态确认gitstatus

对于多仓库:

# 方法1:手动逐个切换cdapp&&gitcheckout develop&&gitpullcd../sdk&&gitcheckout develop&&gitpullcd../docs&&gitcheckout develop&&gitpull# 方法2:使用脚本(推荐)#!/bin/bash# switch_all_branches.shfordirinapp sdk docs;doecho"=== 切换到$dir==="cd$dirgitcheckout developgitpull origin developcd..echo""done

4.实用的 Git 操作命令

查看状态和日志:

# 查看状态(最重要)gitstatus# 查看提交历史gitlog --oneline -10# 最近10条gitlog --graph --all# 图形化查看# 查看文件变化gitdiff# 未暂存的修改gitdiff--staged# 已暂存的修改

分支操作:

# 查看分支gitbranch# 本地分支gitbranch -a# 所有分支(包括远程)# 创建分支gitbranch feature/xxx# 创建分支gitcheckout feature/xxx# 切换到分支# 或一步完成gitcheckout -b feature/xxx# 删除分支gitbranch -d feature/xxx# 删除本地分支gitpush origin --delete feature/xxx# 删除远程分支

提交代码:

# 三步提交法gitadd.# 添加所有修改gitaddfile1 file2# 添加指定文件gitcommit -m"描述"# 提交到本地gitpush origin branch-name# 推送到远程

5.多仓库管理工具

使用 Git Submodule(子模块):

# 添加子模块gitsubmoduleaddhttps://github.com/user/repo.git path/to/folder# 克隆包含子模块的项目gitclone --recursive https://github.com/user/main-repo.git# 或克隆后初始化gitclone https://github.com/user/main-repo.gitcdmain-repogitsubmodule initgitsubmodule update# 更新所有子模块gitsubmodule foreachgitpull

使用脚本批量操作:

# 批量切换分支脚本:switch_all.sh#!/bin/bashTARGET_BRANCH=$1# 传参:要切换的分支名echo"开始批量切换分支到:$TARGET_BRANCH"echo"=================================="REPOS=("app""sdk""docs""module1""module2")forrepoin"${REPOS[@]}";doif[-d"$repo"];thenecho""echo"处理仓库:$repo"echo"----------------"cd"$repo"||continue# 检查分支是否存在ifgitrev-parse --verify"$TARGET_BRANCH">/dev/null2>&1;thenecho"切换到分支:$TARGET_BRANCH"gitcheckout"$TARGET_BRANCH"gitpull origin"$TARGET_BRANCH"elseecho"分支$TARGET_BRANCH不存在,检查远程..."ifgitls-remote --exit-code --heads origin"$TARGET_BRANCH">/dev/null2>&1;thenecho"从远程拉取分支:$TARGET_BRANCH"gitfetch origin"$TARGET_BRANCH"gitcheckout -b"$TARGET_BRANCH""origin/$TARGET_BRANCH"elseecho"警告:分支$TARGET_BRANCH在远程也不存在"CURRENT_BRANCH=$(gitbranch --show-current)echo"当前分支:$CURRENT_BRANCH"fificd..elseecho"警告:目录$repo不存在"fidoneecho""echo"=================================="echo"批量切换完成"

使用方式:

chmod+x switch_all.sh ./switch_all.sh develop# 切换到 develop 分支./switch_all.sh main# 切换到 main 分支./switch_all.sh feature/xxx# 切换到 feature 分支

6.常见问题解决方案

问题1:切换分支时有未提交的修改

# 方法1:暂存修改gitstash# 保存修改gitcheckout other-branch# 切换分支gitstash pop# 恢复修改# 方法2:强制切换(会丢失未提交的修改)gitcheckout -f other-branch# 方法3:提交当前修改gitadd.gitcommit -m"临时提交"gitcheckout other-branch

问题2:远程分支已删除,本地还在

# 查看所有分支(包括远程已删除的)gitbranch -a# 清理本地缓存的远程分支gitfetch --prune# 或gitremote prune origin

问题3:冲突解决

# 切换分支前先更新当前分支gitpull origin current-branch# 如果出现冲突gitstatus# 查看冲突文件# 手动解决冲突后gitadd.gitcommit -m"解决冲突"

7.工作流建议

每日工作流程:

# 1. 拉取最新代码gitpull origin develop# 2. 创建功能分支gitcheckout -b feature/your-feature# 3. 开发、提交gitadd.gitcommit -m"feat: 添加功能"# 4. 推送到远程gitpush origin feature/your-feature# 5. 创建 Pull Request/Merge Request

多仓库同步流程:

# 创建同步脚本:sync_all.sh#!/bin/bashecho"开始同步所有仓库..."fordirin*/;doif[-d"$dir/.git"];thenecho"同步:$dir"cd"$dir"# 获取当前分支CURRENT_BRANCH=$(gitbranch --show-current)echo" 当前分支:$CURRENT_BRANCH"# 拉取最新gitpull origin"$CURRENT_BRANCH"# 如果有未提交的修改,暂存if!gitdiff--quiet;thenecho" 有未提交修改,正在暂存..."gitstashgitpull origin"$CURRENT_BRANCH"gitstash popficd..echo""fidoneecho"同步完成"

8.实用别名设置(.gitconfig)

~/.gitconfig中添加:

[alias] # 查看状态 st = status ls = log --oneline -20 graph = log --graph --all --oneline # 分支操作 br = branch co = checkout cob = checkout -b # 清理 cleanup = "!git fetch --prune && git branch --merged | grep -v '\\*\\|main\\|develop' | xargs -n 1 git branch -d" # 多仓库操作 all = "!f() { for dir in */; do if [ -d \"$dir/.git\" ]; then echo \"=== $dir ===\"; cd \"$dir\" && git $@; cd ..; fi; done; }; f"

使用别名:

gitst# 代替 git statusgitco develop# 代替 git checkout developgitall status# 查看所有仓库状态gitall pull# 所有仓库拉取更新

9.可视化工具推荐

如果命令行不熟悉,可以使用:

  1. GitHub Desktop- 简单易用
  2. SourceTree- 功能强大
  3. VS Code Git 插件- 集成在编辑器中
  4. GitKraken- 专业版功能多

10.紧急情况处理

如果操作混乱了:

# 1. 先保存当前状态gitstash save"紧急备份"# 2. 回到安全点gitcheckout developgitpull origin develop# 3. 重新开始gitcheckout -b feature/new-start# 4. 如果需要之前的修改gitstash list# 查看暂存列表gitstash apply stash@{0}# 应用最新的暂存

如果需要重置:

# 软重置(保留修改)gitreset --soft HEAD~1# 硬重置(彻底删除)gitreset --hard HEAD~1gitreset --hard origin/develop# 与远程一致

记住:多仓库操作的关键是保持结构清晰,使用脚本自动化,遇到问题先备份再操作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 8:36:49

零基础转行网络安全学习路线规划,需要学习多久才能上手

对于想入行网络安全的新人来说,最常困惑的问题莫过于:“零基础转行,需要学习多久才能上手?” 其实,网络安全入门门槛比想象中低,关键在于理清技术领域的分类特点,再制定科学的学习路径。 只要…

作者头像 李华
网站建设 2026/4/23 8:31:18

2026远程控制软件测评:ToDesk vs 向日葵,哪款才是打工人的效率神器?

远程办公早已不是新鲜事,几年前在疫情催化下,它从一种“可选项”变成了许多人的“必需品”。远程控制软件,正是实现环境自由、时间自由的关键工具——让你在出差途中、居家隔离时,甚至只是不想回办公室的周末,都能轻松…

作者头像 李华
网站建设 2026/4/23 8:34:08

赶deadline必备!千笔,深得人心的AI论文工具

你是否曾为论文开题绞尽脑汁?是否曾在深夜面对空白文档文思枯竭?是否反复修改却总对表达不满意?如果你正在经历这些学术写作的经典困境,那么,是时候认识一下正在改变万千学生论文写作方式的创新工具——千笔AI。它不仅…

作者头像 李华
网站建设 2026/4/23 8:34:51

建议收藏|更贴合继续教育的AI论文网站,千笔·专业学术智能体 VS 文途AI

随着人工智能技术的迅猛发展,AI辅助写作工具正逐步成为高校学生完成毕业论文的重要助手。越来越多的学生开始借助这些智能工具提升写作效率、优化内容结构,尤其是在论文开题、文献综述和数据分析等环节中,AI的强大能力展现出显著优势。然而&a…

作者头像 李华