ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PyCharm与Git、GitHub协作指南:从零掌握版本控制

PyCharm与Git、GitHub协作指南:从零掌握版本控制 写代码这件事最怕的就是辛辛苦苦改了一版结果发现思路错了想找回原来的版本却怎么都找不回来。我一开始接触Git也是被这个问题逼的后来养成了一个习惯只要在PyCharm里写东西第一件事就是确认版本控制已经启用。PyCharm对Git的支持非常完整从初始化仓库、提交代码、创建分支到推送到GitHub、拉取更新几乎都可以在IDE界面里完成不需要死记一堆命令。这篇文章专门写给所有想用PyCharm配合Git和GitHub管理代码但又被命令行劝退的人。我会把每一步的菜单位置、点击逻辑、背后原理都讲清楚顺手把日常踩坑的解决办法一起列出来。你跟着走一遍基本就能把“保存代码”升级成“保存每一次修改”以后再也不用害怕改出问题。PyCharm版本以2023、2024系列为例社区版足够用界面布局差别不大。1. 准备工作先把手里的工具备齐1.1 为什么要在PyCharm里直接操作Git有些人敲命令行很顺但也有一大批人看到黑色终端就紧张我也曾是后者。PyCharm把Git的操作做成了可视化菜单同样的功能点几次鼠标就能完成。对初学者来说可视化最大的好处是能清楚看到文件状态绿色是新增蓝色是修改红色是未跟踪灰色是忽略一目了然比命令行提示更容易建立直觉。先说明一点这不是说命令行不重要而是建议你先在一个有反馈、能看见文件变化的环境里理解Git的逻辑等真的搞懂版本控制怎么运作再看命令行的git status、git log会发现那些命令高人一等心里完全有数。1.2 安装Git给电脑补上版本控制引擎PyCharm自己不带GitGit是一个独立的版本控制工具需要先装到操作系统里。Windows从git-scm.com下载安装包一路Next。安装时按默认选项就行建议保留“Git from the command line and also from 3rd-party software”这一项方便后续在终端也能直接调用git命令。macOS有Homebrew的话终端执行 brew install git没有就直接去git-scm.com下载dmg安装包。Linuxsudo apt install gitDebian/Ubuntu系其他发行版用对应包管理器。安装完验证一下打开终端Windows打开Git BashmacOS打开Terminal输入git --version能输出版本号就说明装好了。这一步是唯一需要在IDE外面完成的环节装完以后后续几乎所有事情都可以回到PyCharm里处理。1.3 准备GitHub账号与专属TokenGitHub是国际主流的代码托管平台相当于给本地Git仓库找了一台挂在云上的备份机。用之前需要注册一个账号这点直接去GitHub官网注册就行不再展开。有一个关键概念得提前说Token也就是访问令牌。GitHub现在不允许直接用账号密码通过HTTPS推送代码而是要用Token代替密码相当于给你一把带权限的钥匙。获取Token的步骤登录GitHub后点右上角头像进入Settings。拉到页面底部进Developer settings。左侧选Personal access tokens再选Tokens (classic)。点Generate new tokenNote随便起个名字比如pycharm-testExpiration选择过期时间权限勾选repo。点Generate token系统会生成一串字符复制保存这个Token只显示这一次。注意Token等同于密码不要提交到代码仓库不要截图发到群里一旦泄露相当于你的仓库对别人敞开了门。忘记或泄露了就在相同位置重新生成一个把旧的删掉。2. 初始配置让PyCharm认识Git和GitHub2.1 指定Git可执行文件路径PyCharm要操作Git必须先知道Git装在哪个位置。打开菜单File - Settings - Version Control - Git右侧有一项Path to Git executable点浏览按钮找到git的可执行文件。Windows一般在这个路径C:\Program Files\Git\cmd\git.exemacOS或Linux一般在/usr/bin/git选好后点Test弹窗显示Git executed successfully就说明PyCharm已经正确识别了Git。如果PyCharm版本比较新也可能自动帮你检测到不需要手动填。2.2 设置全局用户名和邮箱Git每次提交时都会记录提交者身份。如果没设置提交时会直接报错告诉你please tell me who you are。推荐直接在终端里设置一次全局生效。PyCharm底部自带Terminal标签页Windows建议切到Git Bash然后执行git config --global user.name Your Name git config --global user.email youexample.com邮箱建议和GitHub注册邮箱保持一致这样提交记录才能关联到你的GitHub账号头像。想检查设置结果执行git config --global --list这里很多人会漏但它是所有操作的根基我建议无论多急先把这两行配好。2.3 登录GitHub账号配置好Git之后继续在设置里配置GitHubFile - Settings - Version Control - GitHub点Add account弹出的窗口里通常有两种方式Log in via GitHub浏览器授权比较省事。Use token直接把之前生成的Token粘进去。我个人更推荐Use token因为流程独立不用反复打开浏览器而且Token方式最稳定。登录成功后PyCharm会显示你的GitHub账号名称之后推送、克隆项目时就可以直接识别你账号下的仓库省去不少输入地址的麻烦。3. 首次提交从零开始把代码纳入版本管理3.1 新建项目并启用Git先在PyCharm里新建一个项目比如一个Python项目。打开菜单栏的VCS菜单如果项目还没有纳入版本控制这里会显示Enable Version Control Integration点击它弹出窗口里选Git点OK。一瞬间项目根目录就多了一个.git文件夹这就是本地仓库。PyCharm会立刻出现几个变化文件颜色变了新增文件会显示为红色底部或左侧出现Git相关的工具窗口。如果VCS菜单里没有这个选项也可以在项目根目录打开终端手动执行git init然后回到PyCharm里刷新效果完全一样。这里要说明一下一个项目只能有一种版本控制方式选了Git之后不要再去启用其他VC。3.2 理解工作区、暂存区、版本库刚开始接触Git这三个名词最容易绕晕我用生活化的方式给你捋一下。工作区你正在编辑的代码目录相当于你书桌上摊开的笔记本。暂存区你挑好了一部分内容准备放进档案袋这个档案袋就是暂存区。版本库档案已经被管理员收走归档进柜子每次归档就是一个历史版本。对应到Git操作修改代码是工作区变化git add是把修改放进暂存区git commit是提交归档生成一条不可变的历史记录。PyCharm里这一切都可视化文件颜色就代表状态右键菜单里有Git - Add、Commit、Log。这个设计很贴心因为你一次可能改了五个文件但只有三个是能拿得出手的你就可以只把这仨加入暂存区提交另外两个留在工作区继续折腾历史记录就不会被半成品污染。3.3 完成第一次add和commit整个过程其实就两步。第一步右键项目根目录选Git - Add把新增文件加入暂存区。操作完成后文件的颜色从红色变成绿色这表示文件已经被Git跟踪并且进入了暂存区。第二步右键项目根目录选Git - Commit Directory...打开提交窗口。在Commit Message输入框里写清楚本次改动例如feat: init project点击窗口下方的Commit按钮第一次提交就完成了。如果勾选了Commit and Push...会连着推送到远程这个后面再讲。提交完成后打开Git工具窗口能看到当前分支名称和第一次提交记录。到这里你的代码已经被Git保护起来了以后改坏了随时能回来。提示Commit Message是写给未来的自己看的建议养成简单规范的习惯比如feat:开头表示新功能fix:开头表示修bugdocs:表示文档改动。少用“update”“修改”这类看不出内容的消息否则三个月后再看历史你会想抽自己。4. 推送远端从本地仓库到GitHub4.1 在GitHub上创建远程仓库本地仓库只能自己用要把代码同步到云端需要先有一个远程仓库。登录GitHub点右上角的加号选New repository填写Repository name比如my-first-project。可见性选Public或Private免费账号建私有仓库也没问题。特别注意一件事如果本地已经有代码创建远程仓库时不要勾选README、.gitignore、License这些初始化文件否则后面推送时会莫名其妙出现冲突。创建成功后页面会显示远程地址常见的是HTTPS格式https://github.com/用户名/仓库名.git记住这个地址下一步要用。4.2 添加远程地址并执行第一次Push在PyCharm里打开菜单Git - Manage Remotes...点加号Name填originURL粘贴刚才的仓库地址保存。也可以直接用终端执行效果一样git remote add origin https://github.com/用户名/仓库名.git远程配置好之后点工具栏或菜单里的Push。第一次推送时PyCharm可能会弹窗要求输入GitHub的用户名和Token用户名填GitHub账号密码位置记得粘贴Token而不是账号密码。如果之前在Settings里登录过账号通常会使用已保存的凭证。推送完成后去GitHub刷新仓库页面就能看到你的代码了。这时Git工具窗口里的Log视图会出现origin/main或者origin/master说明本地分支和远程分支已经建立了对应关系。4.3 之后每次修改该怎么同步推送过一次之后日常操作基本就固定成了一个循环修改代码 - 本地提交 - Push推送。有人问改一次推一次会不会太频繁其实关键在于提交的节奏。合理的粒度是完成一个逻辑单元就提交一次比如实现了一个函数、修复了一个bug、写完了一个文档章节而不是每敲一个字符就保存一次。单元完成后再同步推送GitHub上的历史就是一条条清晰的功能记录而不是乱七八糟的“aaa”“bbb”这种垃圾消息。在PyCharm里的具体操作是文件变蓝右键Git - Commit在Commit窗口里勾选Commit and Push一步到位。这个动作做几次就能形成肌肉记忆。5. 拉取更新克隆和同步的两种方式5.1 从GitHub克隆项目到本地换电脑或者加入一个新项目时没人会把代码压缩包发来发去都是从远程仓库克隆一份下来。在PyCharm欢迎界面点Get from VCS或者打开菜单File - New - Project from Version Control粘贴远程仓库地址选择保存目录点Clone。克隆下来的项目自带.git文件夹和远程origin配置PyCharm会自动识别。克隆刚完成时项目文件是正常的深色或灰色表示当前内容与远程一致没有待处理的修改。这一步对新手来说非常友好因为你不用再手动执行git init、git remote add这些初始化操作PyCharm全都处理好了。5.2 Pull和Fetch到底有什么区别协作场景里队友可能刚刚推送了新代码你要把这些更新同步到本地这时会遇到两个高频菜单Pull和Fetch。Fetch把远程仓库的最新提交记录下载到本地但不修改你的工作区文件相当于先看一眼别人改了什么。Pull下载远程更新并直接合并到当前分支相当于直接拿过来继续用。日常开发用Pull最多因为它一步到位让本地代码快速进入最新状态。但如果你担心合并会引入冲突想先观察一下问题可以先执行Fetch再看Git工具窗口里的分支对比情况确认没有大问题后再手动合并。PyCharm里的操作菜单Git - Pull选择要拉取的分支即可。拉取成功后本地代码会自动更新如果冲突则会弹出冲突解决界面。6. 分支协作多人开发最常用的三个动作6.1 新建分支与切换分支分支这个概念本质上是平行世界。你可以在主分支上开一条新分支随便改、随便试完全不干扰主分支的稳定状态等新功能测试好了再合并回主分支。PyCharm底部状态栏右侧会显示当前分支名默认可能是main或master。点击这个分支名会弹出Branches窗口选New Branch输入一个有意义的分支名比如feature/login或fix/typo。创建后PyCharm会自动切换到新分支。也可以使用菜单Git - Branches在弹出窗口里完成新建、切换、删除等操作。切换分支极其频繁建议记住快捷键或记住右下角这个蓝色分支名位置。注意新建分支后后续提交都会写到这个新分支里。如果发现改的东西不见了先看看右下角当前分支是不是你自己以为的那个这个坑我踩过不止一次。6.2 合并分支假设feature/login分支开发完成需要把代码合回main分支。合并之前先切换到目标分支也就是main。然后打开菜单Git - Merge Changes...在弹窗里选择要合并进来的分支feature/login点Merge。如果两边的改动互不干扰Git会自动合并提交历史里会多一条Merge commit表示做过合并操作。如果两边碰巧改了同一块代码冲突窗口就会弹出来进入下一节的处理流程。这里有个小技巧合并之前先看一眼目标分支是不是干净、没有未提交的修改否则合并过程中容易把状态搞混乱。可以在Git工具窗口或Local Changes面板里确认。6.3 遇到冲突时怎么处理冲突是多人协作里避不开的但真没那么可怕。它的本质就是你和别人改了同一个文件的同一块区域Git不知道应该听谁的。PyCharm弹出的冲突解决界面里左边一般是当前分支的版本右边是待合并分支的版本中间是合并结果预览区。你需要手动把两边的代码调整成最终想要的样子然后点Apply。处理冲突时我最想提醒的是先看清哪个版本是谁的不要图省事直接点“接受左边”或“接受右边”这样大概率会把对方的修改覆盖掉。正确做法是根据业务逻辑把两边需要的代码都保留下来删掉确实不要的再应用。日常想减少冲突最有效的方法是每次提交前先Pull一次让本地分支尽量接近远程最新状态这样两边改同一块区域的可能性会大幅降低。7. 回滚与撤销Git给你的后悔药7.1 撤销未提交的修改写代码写high了发现一个文件被改得面目全非想恢复到上一次提交的状态这个场景太常见了。在PyCharm里右键要恢复的文件选Git - Revert这个文件就会立刻回到最近一次提交时的内容。如果改了一堆文件可以在Local Changes窗口里选中所有需要撤销的修改右键选Revert一次性全部还原。这里要特别提醒Revert这个操作没有二次确认做了就是做了未提交的修改直接没了。所以操作前最好确认一下这个文件里没有还想留下的内容。如果实在不确定可以先把整个文件复制到项目外备份一下再执行Revert。7.2 回退到某个历史版本还有另一种情况已经提交了但提交后发现有问题想回到更早的版本。打开Git - Log会看到一长串提交历史。选中你想回到的那条历史提交右键选择Reset Current Branch to Here弹窗里会让你选Reset TypeSoft保留所有修改但回到未提交状态相当于把这些改动从提交里拿出来可以重新组织后再次提交。Mixed保留修改但退出暂存区文件会变成未add的状态。Hard工作区、暂存区全部重置到该提交之后发生的所有提交和修改都会被丢弃这是最暴力的操作。我自己的习惯是如果只是觉得最后一次提交不好想重新提交优先选Soft代码改动还留在编辑器里重新提交很方便。除非确定之后的修改内容完全没用否则别轻易用Hard。重要如果代码已经Push到GitHub并且其他队友已经拉取过你的提交尽量不要用Hard Reset后再强制推送这会把别人本地的历史搞乱。这种情况更推荐用Reverse Commit也就是生成一个新提交来抵消旧提交的内容保留完整历史安全很多。8. 实务中容易踩的坑与排查速查表8.1 提交时报错user.name/email新手最容易遇到的第一个报错提交时终端或PyCharm控制台里会出现大致这样的信息*** Please tell me who you are.原因很简单Git不知道你是谁没法给提交写上作者。解决办法就是回到第2.2节设置全局用户名和邮箱。如果你只想给当前仓库设置不进全局也可以在当前项目下执行git config user.name Your Name git config user.email youexample.com8.2 推送被拒推送的时候遇到类似这样的提示! [rejected] main - main (fetch first)意思是远程仓库有一些本地没有的提交Git为了安全不允许你直接强行覆盖。最常见的原因有两个一是远程仓库初始化时勾选了README等文件导致远程有初始提交二是有队友在你之前推送了代码。解决办法很简单先执行Git - Pull把远程最新内容拉下来有冲突就解决冲突然后再Push。8.3 换行符和.ignore问题还有个很隐蔽的坑是换行符。Windows下文件默认是CRLF换行macOS和Linux默认是LFGit为了跨平台会自动做转换。但如果配置不对会出现一种奇怪现象你对某个文件没做任何改动但它显示为已修改而且diff里整个文件都变了。Windows用户建议执行git config --global core.autocrlf truemacOS或Linux用户执行git config --global core.autocrlf input这样可以很大程度上避免换行符引起的假diff。另外项目里有些目录或文件本来就不该进版本库比如Python项目里的__pycache__、虚拟环境目录、IDE配置、本地密钥等。在项目根目录新建一个.gitignore文件把不需要追踪的内容写进去__pycache__/ .idea/ *.pyc .env venv/提示已经提交过的文件即使后来写进.gitignore也不会被忽略因为Git已经跟踪它了。这时要先把缓存移除再提交在终端执行git rm -r --cached .然后重新git add和commit。这个命令有一定风险建议先搞明白状态再执行。8.4 排查思路速查表场景第一检查点第二检查点常见处理办法Commit操作没反应或报错Git是否安装、PyCharm里Git路径是否正确项目是否有.git文件夹Setting里重新指定git.exe或启用版本控制Push超时或失败远程URL是否拼写正确当前分支名与远程分支是否一致Manage Remotes里修改URL先Pull再PushClone失败网络是否正常、仓库是否存在仓库是否私有、是否有权限私有仓库确保证据或Token权限正确文件颜色一直不变项目是否已经Git init文件是否被.gitignore误写执行VCS启用Git或检查ignore规则所有文件都显示蓝/红是否真的改过内容换行符配置是否正确按8.3设置core.autocrlf最后再说一点个人体会。用了这几年Git我最大的感受是Git不是用来给自己找麻烦的而是用来兜底的。养成小步提交、写清楚commit message的习惯之后改代码会变得特别有底气因为你永远知道最坏的情况不过是回到上一个历史版本。你可以在PyCharm里把所有操作都点一遍等思路清晰了再回头看命令行里的git status、git log一定会有种豁然开朗的感觉。如果你按这个流程走下来卡在某一步大概率是配置路径或者凭证问题回到第2节和第8节对照着检查一遍就能解决。
返回列表