ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Git入门指南:从零掌握版本控制核心概念与实战操作

Git入门指南:从零掌握版本控制核心概念与实战操作 1. 从“版本混乱”到“时光机”为什么你需要Git如果你曾经为了保存一个文档的不同版本在电脑里创建过“最终版.docx”、“最终版2.docx”、“最终版真的不改了.docx”这样的文件那么恭喜你你已经手动实践了最原始的版本控制。这种方式的痛苦每个写过代码、做过设计、写过论文的人都深有体会你永远不知道哪个版本才是对的想回退到三天前的某个状态更是难如登天。Git就是来解决这个问题的“时光机”。它不是一个高深莫测、只属于程序员的黑魔法而是一个记录你工作每一步变化的强大工具。想象一下你写的每一行代码、画的每一个图层、写的每一段文字Git都能帮你拍一张“快照”。你可以随时回到任意一张快照查看当时的状态甚至可以在不同的快照之间穿梭、合并创造出新的可能性。对于初学者来说Git常常被两个误解吓退一是觉得它命令行操作复杂二是觉得它只和“编程”、“团队协作”有关。其实不然。它的核心思想极其简单——记录变化。你可以用它来管理你的个人博客文章、你的毕业设计论文、你的摄影作品后期PSD文件甚至是你的菜谱改良记录。一旦你掌握了基本操作那种“一切尽在掌握”的安全感和自由度会让你再也回不去手动管理版本的日子。这篇教程的目标就是帮你亲手搭建并启动这台“时光机”。我们会从最基础的安装配置开始一步步深入到日常最核心的操作用大量生活化的类比和实际例子让你不仅知道怎么敲命令更理解每个命令背后Git在帮你做什么。当你读完并跟着操作一遍你就能 confidently 说“我会用Git管理我的项目了。”2. 启程之前安装Git与初次见面在开始任何奇幻旅程之前我们得先拿到地图和交通工具。对于Git之旅第一步就是在你的电脑上安装它并进行最基本的身份设置。2.1 跨平台安装Windows、macOS 与 LinuxGit是跨平台的但在不同系统上的安装方式略有不同。这里我们追求最稳妥、最通用的方法。对于 Windows 用户Windows系统没有预装Git我们需要去官网下载安装程序。访问 Git 的官方网站通常搜索 “git-scm” 就能找到。点击下载适用于 Windows 的安装程序.exe文件。下载速度慢的话可以寻找国内的镜像站。运行安装程序。安装过程中大部分选项保持默认即可但有几个关键点需要注意选择默认编辑器你会看到一个选择默认文本编辑器的界面。如果你不知道选什么就选择Use Vim或Use Nano。Vim是Linux下强大的编辑器但初学者可能不习惯Nano则简单许多。你也可以选择你熟悉的编辑器如VSCode但这需要额外配置。对于纯新手选Use Vim并快速学习它的基本操作i进入编辑模式编辑完后按ESC然后输入:wq保存并退出是很好的开始因为你在服务器上很可能只能用它。调整PATH环境选择Git from the command line and also from 3rd-party software。这会把Git的可执行文件添加到你的系统PATH中让你能在任何地方比如CMD或PowerShell直接使用git命令。换行符转换选择Checkout Windows-style, commit Unix-style line endings。这是为了兼容性防止在不同系统间协作时换行符CRLF vs LF引发混乱。对于 macOS 用户macOS 有几种安装方式最简单的方法如果你安装了Xcode Command Line Tools它可能已经包含了Git。打开终端Terminal输入git --version看看是否有输出。如果没有系统可能会提示你安装。推荐方法通过包管理器Homebrew安装。如果你已经安装了Homebrew没有的话可以搜索“Homebrew安装”快速搞定只需在终端输入brew install git即可。这种方式便于后续更新和管理。图形化安装同样可以去Git官网下载macOS版的安装程序.dmg文件像安装普通应用一样完成安装。对于 Linux 用户如Ubuntu/Debian对于大多数Linux发行版通过包管理器安装是最佳实践。Ubuntu/Debian系打开终端输入sudo apt update sudo apt install gitCentOS/RHEL/Fedora系输入sudo yum install git或sudo dnf install git安装完成后在任何系统的终端Windows的CMD/PowerShell/Git BashmacOS/Linux的Terminal中输入git --version。如果看到类似git version 2.xx.x的输出恭喜你安装成功注意Windows用户安装后你可能会多出一个叫 “Git Bash” 的应用。它是一个模拟Linux终端环境的工具提供了类似Linux的命令行体验如ls,pwd,cat等命令。在后续教程中我们统一使用“终端”来指代这些命令行界面。Windows用户使用Git Bash可以获得更一致的体验。2.2 初次配置告诉Git“你是谁”安装好Git后它还不知道操作者是谁。我们需要进行一些全局配置最重要的是设置用户名和邮箱。这个信息会记录在你每一次的提交快照中就像在作品上签名一样。打开你的终端依次输入以下两条命令将引号内的内容替换成你自己的信息git config --global user.name 你的名字 git config --global user.email 你的邮箱这里的--global参数表示这是全局配置对这台电脑上你所有的Git仓库都生效。你也可以针对某个特定仓库进行不同的配置使用--local但初期全局配置就够了。为什么邮箱很重要这个邮箱会和你后续可能使用的代码托管平台如GitHub、Gitee的账户关联。平台通常依靠提交记录中的邮箱来识别贡献者并将提交与你的平台账户对应起来展示你的贡献图。你可以通过以下命令查看所有的全局配置git config --global --list如果看到你刚才设置的名字和邮箱就说明配置成功了。至此你的Git“时光机”已经就绪燃料配置也已加满可以准备出发了。3. 创建你的第一个仓库从零到一的魔法仓库Repository简称Repo是Git工作的核心单元。你可以把它理解为一个被Git接管的“魔法文件夹”Git会记录这个文件夹里所有文件的变化历史。现在让我们亲手创建一个。3.1 两种创建方式初始化与克隆创建仓库主要有两种场景一是从零开始一个新项目二是参与一个已经存在的项目。场景一初始化本地仓库git init假设你要开始写一个新的小说或者一个新的网页项目。你可以在电脑上先创建一个普通的文件夹。打开终端使用cd命令进入你打算放置项目的目录。例如在用户目录下创建一个my_project文件夹并进入cd ~ # 进入用户主目录Windows用户可能是 cd %USERPROFILE% mkdir my_project cd my_project执行神奇的初始化命令git init你会看到类似Initialized empty Git repository in /path/to/your/my_project/.git/的提示。这意味着Git在这个文件夹里创建了一个隐藏的.git子目录。这个.git文件夹就是Git的“数据库”和“控制中心”里面存储了所有的版本历史、配置信息等。千万不要手动删除或修改它现在my_project文件夹就是一个Git仓库了。但它目前是空的还没有开始跟踪任何文件。场景二克隆远程仓库git clone更多时候我们是参与到已有的项目中比如从GitHub或公司内部的GitLab上获取代码。这时我们需要“克隆”。在代码托管平台上找到你想参与的项目找到它的仓库地址通常是一个以.git结尾的URL有HTTPS和SSH两种格式初期建议使用HTTPS。HTTPS格式https://github.com/username/repo_name.gitSSH格式gitgithub.com:username/repo_name.git在终端中进入你希望存放这个项目的目录然后执行克隆命令git clone https://github.com/username/repo_name.git执行后Git会做几件事首先在当前目录下创建一个与仓库同名的文件夹repo_name然后把这个远程仓库的所有文件和历史记录完整地下载到这个文件夹里并自动将其初始化为一个本地仓库即包含.git目录。克隆完成后你就拥有了一个和远程一模一样的本地副本可以开始你的工作了。3.2 理解工作区、暂存区和版本库在开始具体操作前必须理解Git的三个核心概念这是理解所有Git命令的基础。我们可以用一个“快递打包”的类比来理解工作区 (Working Directory)就是你电脑上能看到的项目文件夹你在里面新增、修改、删除文件。这就像你的“原料堆放场”。暂存区 (Staging Area / Index)这是一个介于工作区和版本库之间的“缓存区域”。你可以选择性地把工作区里已经完成、准备提交的改动“添加”到这里。这就像你把要寄出的物品挑选出来放进快递盒。版本库 (Repository)尤其是本地版本库中的提交历史 (Commit History)。当你执行提交操作时暂存区里的所有内容会作为一个永久的“快照”被保存到这里。这就像你把封好的快递盒贴上运单交给快递公司归档。一旦提交这个快照就永久存在于历史中虽然可以通过复杂操作修改但初学者应视为永久。为什么要设计“暂存区”这个中间环节它的好处是给你提供了分阶段提交的灵活性。比如你同时修改了A文件和B文件但A文件的修改已经完成B文件只改了一半。你可以只把A文件的改动添加到暂存区然后提交这样这次提交就只包含A的修改历史记录会非常清晰。没有暂存区你就只能一次性提交所有工作区的改动。接下来的所有命令几乎都是围绕在这三个区域之间移动内容而展开的。4. 日常四部曲添加、提交、推送与拉取掌握了基本概念我们就可以开始最常用、最核心的Git工作流了。这个流程可以概括为在工作区干活 - 将改动添加到暂存区 - 将暂存区内容提交到本地版本库 - 将本地提交推送到远程仓库。同时也要学会从远程仓库获取更新。4.1 状态侦查与文件跟踪git status与git add在你修改了文件之后第一件事永远是查看状态。git status你的全景雷达在仓库目录下运行git status它会告诉你当前所有文件的状态是Git中使用频率最高的命令之一。位于”Changes not staged for commit“下的文件表示这些文件在工作区被修改了但还没有被添加到暂存区即还没放进快递盒。位于”Changes to be committed“下的文件表示这些文件已经在暂存区等待被提交快递盒已打包好等待贴单发货。位于”Untracked files“下的文件表示这些是新创建的文件Git之前没有跟踪过它们原料场里新出现的、未被识别的物品。git add将改动送入暂存区这个命令用于将工作区的改动“添加”到暂存区。git add file_name添加某个特定文件。git add .或git add --all添加当前目录下所有有改动的文件包括新文件和被修改的文件。这是一个常用但需要小心的命令因为它会一次性添加所有改动可能导致你不想提交的调试代码也被加进去。git add *.js使用通配符添加所有js文件。实操心得养成“小步快跑”的提交习惯。每次git add最好只添加一个逻辑完整的改动单元比如修复了一个Bug或完成了一个小功能。然后用git status确认一下暂存区里的文件是不是你想要的。这能让你的提交历史像一篇篇清晰的日记而不是一团乱麻。4.2 创建历史快照git commit当暂存区里的内容已经是你想保存的一个完整状态时就可以提交了。git commit -m “提交说明”为快照命名-m参数后面跟着的字符串是本次提交的说明信息。这个信息至关重要一个好的提交信息应该像新闻标题一样简明扼要地概括这次提交做了什么。差劲的例子git commit -m “fix bug”或git commit -m “update”。这等于什么都没说。好的例子git commit -m “修复用户登录时密码验证失效的问题”或git commit -m “添加首页轮播图组件支持自动播放与手动切换”。提交信息是给你未来自己以及你的队友看的。想象一下三个月后你想知道某行代码为什么这么写一个清晰的提交历史就是最好的线索。如果不加-m参数Git会打开你配置的默认文本编辑器如Vim让你在一个更长的界面里编写提交说明。第一行是简短摘要空一行后可以写详细的正文。这对于复杂的提交非常有用。执行git commit后暂存区的内容就被打包成一个永久的快照保存到了本地版本库中。此时暂存区会被清空快递盒已寄出等待打包下一个。4.3 查看历史与差异git log与git diff提交之后我们如何查看历史记录和具体的改动内容呢git log翻阅历史日记这个命令会按时间倒序列出所有的提交历史。每条记录包括提交的哈希值一长串唯一的ID、作者、日期和提交信息。git log --oneline以简洁的单行模式显示只显示缩略的哈希值和提交信息查看概览时非常方便。git log -p显示每次提交的具体内容差异patch。git log --graph --oneline --decorate --all一个强大的组合命令可以图形化地展示分支和合并历史当项目复杂后非常有用。git diff对比变化细节这个命令用于查看文件具体的改动内容。git diff比较工作区和暂存区的差异。即你改了文件但还没git add之前看看改了哪里。git diff --staged或git diff --cached比较暂存区和最后一次提交的差异。即你已经git add了在git commit之前确认一下即将提交的内容。git diff commit1 commit2比较任意两次提交之间的差异。git diff的输出是标准的差异格式unified diff。以-开头的行表示被删除以开头的行表示被新增。这能让你清晰地看到每一处代码的增删改。4.4 与远程仓库同步git push与git pull到目前为止我们的操作都在本地。为了让其他人看到你的工作或者获取他人的更新需要和远程仓库如GitHub互动。git push上传你的本地提交当你完成本地提交后需要将本地分支上的新提交“推送到远程仓库对应的分支上。git push origin main这条命令的意思是将本地的main分支目前主流默认分支名以前常用master推送到远程仓库默认别名origin的main分支。如果是第一次推送可能需要加上-u参数建立追踪关系git push -u origin main之后就可以简写为git push。git pull拉取远程更新并合并当你的队友也向远程仓库推送了提交你需要把这些更新“拉取”到本地并合并到你的工作分支。git pull origin main这个命令实际上是两个操作的组合git fetch获取远程最新数据 git merge将远程数据合并到当前分支。所以如果在你拉取之前你也修改了相同的文件可能会产生冲突这是Git使用中最常见的问题之一我们稍后会详细讲解如何处理。git fetch与git pull的区别这是一个关键点。git pull是“拉取并合并”而git fetch只是“拉取”。git fetch origin main只会将远程main分支的最新状态下载到本地一个叫origin/main的“远程跟踪分支”上不会自动合并到你当前工作的本地main分支。这给了你一个“缓冲”的机会你可以先查看一下远程的更新git log origin/main再决定是否以及如何合并git merge origin/main。对于初学者直接用git pull问题不大但在团队协作中先fetch再审视变化是一个更稳妥的好习惯。至此你已经掌握了Git最核心的日常单人工作流修改 - 添加 - 提交 - 推送。以及获取更新拉取。这套组合拳足以应对80%的个人项目场景。5. 分支平行宇宙里的创新与协作如果说提交是时间线上的快照那么分支Branch就是创造平行时间线的能力。这是Git最强大、最精髓的功能它让团队协作和创新尝试变得安全而高效。5.1 为什么需要分支一个生动的比喻想象你正在写一本小说。主线剧情main分支已经写到了第10章并且发布给了读者。这时你灵光一现想尝试一个全新的故事结局。如果你直接在原稿上修改万一新结局写砸了想回到原来的状态就很麻烦而且期间原稿也无法发布更新。有了分支你可以这样做从第10章这个时间点创建一个新的分支比如叫experimental-ending。在这个新分支上你可以天马行空地重写结局无论怎么修改都不会影响main分支上的原稿。如果新结局很棒你可以把它“合并”回主线如果写砸了直接删除这个分支即可主线毫发无损。在软件开发中main/master分支通常用于存放稳定、可发布的代码。任何新功能开发、Bug修复都应该创建新的分支来完成确保主线始终干净、可部署。5.2 分支的创建、切换与合并查看与创建分支git branch列出所有本地分支当前所在分支前会有一个*号。git branch branch_name基于当前提交创建一个名为branch_name的新分支。注意这个命令只创建不切换。切换分支git checkout branch_name切换到指定分支。你的工作区文件会瞬间变成该分支最新提交时的样子。git checkout -b new_branch_name这是一个超级常用的组合命令意思是“创建并切换”到新分支。相当于git branch new_branch_namegit checkout new_branch_name。合并分支当在新分支例如feature-login上完成功能开发并测试通过后你需要将其合并回主分支main。首先切换回主分支git checkout main。然后执行合并git merge feature-login。Git会尝试将feature-login分支上的所有新提交“快进”或“三方合并”到main分支。如果两个分支对同一个文件的同一部分进行了不同的修改就会产生合并冲突这是下一节的重点。删除分支合并完成后通常可以删除已经合并的特性分支保持仓库整洁。git branch -d branch_name删除已合并的分支。git branch -D branch_name强制删除分支即使它还没有被合并慎用。5.3 冲突当平行宇宙交汇时冲突是Git使用中的常态并不可怕。它发生在以下情况你修改了文件A的某几行而你的队友在远程仓库的同一分支上也修改了文件A的相同行并且他已经推送了。当你尝试git pull或git merge时Git无法自动决定该保留谁的修改就会报告冲突。冲突的表现Git会在冲突的文件中插入特殊的标记 HEAD 这是你本地的修改内容。 这是远程/其他分支的修改内容。 branch-name HEAD和之间是你的修改和 branch-name之间是对方的修改。解决冲突的步骤不要慌。Git只是把问题暴露出来等待你手动解决。使用git status查看哪些文件处于“Unmerged paths”状态。用文本编辑器打开这些冲突文件。仔细阅读冲突标记处的代码与队友沟通如果可能决定最终要保留的代码。可能需要保留一方也可能需要将两方的修改融合。手动编辑文件删除所有冲突标记,,并保留你希望成为最终版本的代码。保存文件。将解决完冲突的文件添加到暂存区git add resolved_file。完成合并提交git commit。此时Git会为你生成一个默认的合并提交信息你可以直接保存。实操心得解决冲突时现代代码编辑器如VSCode、IntelliJ IDEA或专门的Git图形化工具如Sourcetree, GitKraken会提供非常直观的界面让你通过点击按钮来选择“采用我的改动”、“采用对方的改动”或“两者都保留”。对于初学者使用这些工具可以大大降低解决冲突的心理门槛。但理解其底层原理仍然非常重要。6. 时光倒流与后悔药版本回退与撤销人非圣贤孰能无过。写错代码、提交了调试信息、误删了文件……这些情况都会发生。Git作为“时光机”提供了多种“后悔药”。6.1 回退提交git reset与git revert这是两个容易混淆但用途截然不同的命令。git reset重置到某个历史点危险但强大这个命令会移动当前分支的“指针”并可选地重置工作区和暂存区。根据参数不同有三种模式git reset --soft commit_id最安全。仅将分支指针回退到指定提交但保留工作区和暂存区的所有内容。相当于“撤销了提交但改动还保留在暂存区”。常用于重新编辑提交信息或拆分提交。git reset --mixed commit_id默认模式。分支指针回退并且重置暂存区到指定提交的状态但保留工作区的修改。相当于“撤销了提交并且把改动从暂存区挪回了工作区”。这是最常用的回退方式让你可以重新选择要提交的内容。git reset --hard commit_id最危险。分支指针、暂存区、工作区全部回退到指定提交的状态。你之后的所有修改包括未提交的都将被丢弃除非你100%确定要抛弃所有新东西否则慎用。如何获取commit_id使用git log --oneline查看提交历史复制你想回退到的那个提交的前7位或完整哈希值。git revert创建一个新的提交来撤销旧的提交安全与reset直接“抹去”历史不同revert会创建一个全新的提交这个提交的内容正好是撤销指定提交所做的更改。例如提交A添加了一行代码git revert A会产生提交B提交B的内容就是删除提交A添加的那行代码。优点不会改变已有的提交历史适合已经推送到远程仓库、与他人共享的提交。它是一种“向前修复”的安全操作。命令git revert commit_id选择哪一个如果提交只在你的本地还没推送给别人想彻底重来用git reset。如果提交已经推送到远程仓库或者你想保留完整的历史记录方便追踪为什么某次修改被撤销用git revert。6.2 撤销工作区与暂存区的修改丢弃工作区的修改未git add如果你改了一个文件但改乱了想直接丢弃所有修改回到最近一次提交的状态git checkout -- file_name或者使用更语义化的新命令Git 2.23git restore file_name警告这个操作不可逆本地修改会被永久覆盖。将文件从暂存区移回工作区已git add 未git commit如果你不小心把不该提交的文件git add了可以把它从暂存区撤出但保留工作区的修改git reset HEAD file_name # 旧命令 git restore --staged file_name # 新命令 (Git 2.23)执行后文件状态变回“Changes not staged for commit”。6.3 找回被删除的文件或提交如果不小心删除了文件或进行了错误的reset --hard只要提交曾经存在过就有机会找回。找回被删除的文件如果文件之前被提交过你可以从历史提交中检出一份副本git checkout commit_id -- file_name这会将指定提交中的那个文件恢复到你的工作区。找回被reset --hard掉的提交Git在相当长一段时间内都会保留你所有操作的引用默认30天即使分支指针已经移动。你可以使用git reflog命令查看本地仓库的所有操作历史包括提交、重置、合并等。运行git reflog找到你误操作之前那个提交的哈希值比如HEAD{1}对应的操作。使用git checkout -b recovery-branch commit_hash基于那个提交创建一个新分支你的“丢失”的提交就回来了。git reflog是你的终极安全网它只记录本地操作。所以在误操作后只要别乱动先查reflog大概率能救回来。7. 进阶技巧与最佳实践掌握了基本操作后一些进阶技巧和良好的习惯能让你的Git使用体验更上一层楼。7.1 使用.gitignore文件你的项目里总有一些文件是不需要纳入版本控制的比如编译生成的二进制文件如.class,.exe,.dll依赖的库文件夹如node_modules/,vendor/编辑器或IDE的配置文件如.vscode/,.idea/系统文件如.DS_Store(Mac),Thumbs.db(Windows)包含敏感信息的文件如配置文件中的密码、密钥将这些文件提交到仓库会污染历史、浪费空间并且可能引发安全问题。.gitignore文件就是用来指定哪些文件或目录应该被Git忽略。如何创建与使用在仓库的根目录下创建一个名为.gitignore的文本文件。每一行写一个忽略规则。# 忽略所有 .log 文件 *.log # 忽略 node_modules 整个目录 node_modules/ # 忽略 build 目录下的所有文件 build/ # 但不要忽略 build 目录下的 README.md 文件 !build/README.md # 忽略当前目录下的 config.ini 文件 /config.ini规则支持通配符*以/开头表示相对于.gitignore文件所在目录。以!开头表示取反即不忽略。创建好.gitignore后这些被忽略的文件就不会出现在git status的未跟踪文件列表里了。最佳实践是在项目一开始就创建好.gitignore文件并把它也提交到仓库中这样所有协作者都能共享同一套忽略规则。7.2 书写规范的提交信息好的提交信息是项目可维护性的基石。这里推荐一种被广泛采用的约定式提交格式它甚至可以被工具解析来自动生成更新日志CHANGELOG。一个结构化的提交信息可以这样写类型[可选 范围]: 描述 [可选 正文] [可选 脚注]类型说明提交的类别。feat新功能fix修复Bugdocs文档更新style代码格式调整不影响代码逻辑如空格、分号refactor代码重构既不是新功能也不是修Bugtest增加或修改测试chore构建过程或辅助工具的变动范围可选说明提交影响的范围比如某个模块或组件login,router。描述简短 imperative 语气祈使句的摘要如“修复登录失败问题”而不是“修复了登录失败问题”。正文可选详细说明修改动机、与之前行为的对比。脚注可选如关联的问题追踪IDCloses #123。例如feat(login): 添加第三方微信登录支持 - 集成微信开放平台SDK - 新增微信登录按钮及回调处理 - 更新用户表结构增加微信unionid字段 Closes #45养成写规范提交信息的习惯长远来看受益无穷。7.3 图形化工具辅助而非依赖命令行是Git的灵魂但图形化界面工具GUI可以作为强大的辅助。它们能直观地展示分支树、提交历史、文件状态对比让git log --graph这样的命令变得一目了然也让解决冲突、挑选提交等操作变得像拖拽一样简单。流行的GUI工具有Sourcetree(免费 Atlassian出品)GitKraken(个人免费团队收费)GitHub Desktop(简洁与GitHub深度集成)VS Code / IntelliJ IDEA 内置的Git工具(对于开发者非常方便)我的建议是从命令行开始学习因为教程、文档、服务器环境都主要使用命令行。在你理解了基本概念和流程后可以挑选一个GUI工具作为日常可视化辅助。当你遇到复杂问题时再回到命令行因为命令行能给你最精确和强大的控制力。两者结合效率最高。8. 真实工作流模拟从零开发一个小功能让我们通过一个完整的模拟场景串联起前面所学的所有知识。假设我们要为一个简单的“待办事项”网页应用添加一个“标记所有为完成”的功能。获取代码首先克隆远程仓库到本地。git clone https://github.com/example/todo-app.git cd todo-app创建特性分支永远不在主分支上直接开发。基于main创建新分支。git checkout -b feature-mark-all-complete开始开发在代码编辑器中修改文件比如app.js和index.html。阶段性提交完成一个逻辑完整的部分后提交一次。git add app.js git status # 确认暂存区内容 git commit -m “feat: 实现标记所有任务为完成的JS逻辑”接着修改HTML部分。git add index.html git commit -m “feat: 在UI中添加‘标记全部完成’按钮”同步远程更新可选在开发过程中可能队友更新了main分支。为了减少最终合并的冲突可以定期将main的更新合并到自己的特性分支。git checkout main git pull origin main # 拉取远程main的最新代码 git checkout feature-mark-all-complete git merge main # 将main的更新合并到当前特性分支如果出现冲突则按前面讲的方法解决。功能完成准备合并功能开发并自测完成后推送到远程仓库自己的分支上。git push -u origin feature-mark-all-complete然后在代码托管平台如GitHub上发起一个Pull Request或Merge Request请求将feature-mark-all-complete分支合并到main分支。这是团队协作中进行代码审查的关键环节。代码审查与合并队友在PR中查看你的代码变更提出意见。你根据意见在本地分支上继续修改、提交、推送。直到审查通过由有权限的人将PR合并到main。清理本地分支远程分支合并后可以删除本地的特性分支。git checkout main git pull origin main # 拉取合并后的最新main git branch -d feature-mark-all-complete # 删除已合并的本地分支至此一个完整的、基于分支的协作开发流程就走完了。这个流程Git Flow, GitHub Flow等变体是现代软件开发的基石。Git的学习曲线前期可能有些陡峭但一旦你理解了它的核心模型工作区、暂存区、版本库和分支概念并熟练运用status,add,commit,push,pull,checkout,merge这些核心命令你就已经掌握了它90%的日常用途。剩下的高级功能可以在遇到具体需求时再去探索。记住多用、多练、遇到问题先git status和git log查看状态善用--help参数如git reset --help查阅官方文档你一定会从一个Git新手成长为版本控制的高手。
返回列表