来源:网络
我的朋友小李上个月入职一家小公司,Python写得不错,前两周都挺顺的。第三周出事了。
老板让他改一个功能,他花了三天改完,结果发现改的方向错了。他想回到三天前的版本,但之前的代码被他自己覆盖了。回收站里找不到,电脑上没有备份。最后他花了整整一天时间,凭记忆把代码改回去了——还漏掉了两个文件。
老板倒是没说什么,但他自己那天晚上失眠了。
这个场景你熟悉吗?代码写到一半想试试新思路,怕改坏了就复制一份 project_v2;改完发现不对,又回到 project_v1;过两天就搞不清哪个是最新版了。
其实,你只需要一个工具:Git。
很多人觉得 Git 很难学,网上教程动不动就是几十个命令。今天我要说的是:作为一个 Python 新手,你真正需要用的 Git 命令,只有6个。学会了这6个,日常工作完全够用。
1. git init —— 从这里开始
假设你刚写好一个 Python 小项目,文件都在一个叫 my_project 的文件夹里。现在想让 Git 开始帮你管理它。
打开终端,进入项目文件夹,输入:
就这一行命令,Git 会在你的项目里创建一个隐藏的 .git 文件夹。这个文件夹就是 Git 的数据库,你所有的历史版本都会存在里面。
适用场景:新建一个项目时执行一次,之后永远不用再管。
2. git add + git commit —— 存个档,随时能回来
这是 Git 最核心的两个命令,一定要放一起理解。
打个比方:你要出去旅游,出门前先把要带的东西从柜子里拿出来(add),再装进箱子关上(commit)。这时候箱子就是一个快照,就算路上丢了东西,你还有这个箱子。
先用 add 告诉 Git 我要存档哪些文件:
# 把一个文件加入暂存区 git add main.py # 把当前目录所有文件全部加入 git add .
新手常用的就是 git add .,一句话把所有改动都加进去。
再用 commit 正式存档:
git commit -m "完成了用户登录功能"
引号里的文字叫提交信息,用来描述你这次改了什么。别偷懒写 fix 或者 update,过两周你回头看,根本不知道改了什么。养成写清楚的好习惯。
新手最困惑的一点:add 和 commit 为什么要分两步?
因为你可以分次 add,一次性 commit。比如你改了三个 Python 文件:main.py、utils.py、config.py,但只想提交前两个,你就可以:
git add main.py utils.py git commit -m "修改了主程序和工具函数"
config.py 的改动留在工作区,不会被提交。这种选择性提交在真实项目中非常有用。
频率建议:不要等写了一整天才 commit。每完成一个小功能就 commit 一次。commit 越小越容易回退,也越容易定位问题。
3. git status + git log —— 看清楚到底发生了什么
改了两天代码,脑中一片混乱:到底改了哪些文件?上次提交是什么时候?
用 status 看现在:
输出大概是这样:
On branch main Changes not staged for commit: modified: main.py modified: utils.py Untracked files: new_feature.py
它会告诉你:哪些文件被改了但还没 add,哪些文件已经 add 了但还没 commit,哪些是新文件 Git 还不认识。
用 log 看过去:
会显示你所有的提交记录,最新的在最上面:
a3f2c1d 添加了密码加密功能 8e1b9f4 完成了用户注册功能 c5d7a2e 初始化项目结构
--oneline 让每条记录只占一行,清爽好读。
新手必备心法:每次执行 git 命令前,先跑一次 git status。就像出门前看看自己口袋里有什么一样,能避免大部分误操作。
4. git push + git pull —— 上传云端,不怕电脑坏
前面讲的 init、add、commit、status、log 都是在本地操作,已经能解决改坏了回不去的问题。但还解决不了一个更可怕的问题:电脑坏了、硬盘挂了、文件误删了。
这时候你需要把代码上传到远程仓库。GitHub 是最常用的,免费,注册就能用。
推上去(push):把本地代码上传到 GitHub
push 之后,你的代码就在 GitHub 上有了一个完整的备份。就算本地电脑坏了,去任意一台电脑上 clone 下来就行。
拉下来(pull):从 GitHub 下载最新代码
新手典型工作流:
早上到公司 —— git pull 同步最新代码 —— 写代码 —— git add . —— git commit -m "XXX" —— git push。
这四步,你一天要用好几次。
新手坑:忘记先 pull 就 push
如果你和别人在同一个项目上工作,或者你自己在多台电脑上开发,push 之前一定要先 pull。否则 Git 会报错,告诉你远程有新东西你还没拿到。
遇到这种报错别慌,先 git pull,有冲突就解决冲突,然后再 git push。
5. git clone —— 换个电脑也能继续写
当你换了一台新电脑,或者想下载别人的开源项目时:
# 把远程仓库完整下载到本地 git clone https://github.com/你的用户名/你的项目名.git
克隆下来的项目自带完整的 Git 历史记录,之前所有 commit 都在。
6. git reset —— 真正的后悔药,新手必学
Git 的后悔分三层,对应三种操作失误的场景。
场景一:文件改坏了,但还没 add
比如你改了 main.py,发现改得乱七八糟想放弃:
文件会恢复到上次 commit 时的状态。注意:这个操作不可逆,改动的代码就真的没了。
场景二:已经 add 了,但还没 commit
把文件从暂存区撤回来(改动保留在工作区):
场景三:已经 commit 了,想回到之前的某次提交
这是最常用的情况。先用 git log --oneline 找到你要回到的那个版本号(比如 a3f2c1d):
# 先看看提交历史 git log --oneline # 假设输出: a3f2c1d 添加了密码加密功能 -- 想回到这个版本 8e1b9f4 完成了用户注册功能 c5d7a2e 初始化项目结构
# 回到 a3f2c1d 版本,后续改动保留在工作区 git reset a3f2c1d
这样代码回到了 a3f2c1d 时的状态,但你在那之后的改动不会消失,只是变成了未提交状态。你可以重新整理后再 commit。
新手注意:如果已经 push 到了 GitHub,不要用 reset 去改已经推上去的提交(除非你确定只有你一个人在仓库里工作)。多人协作时,reset 之后再 push 会报错,需要用 git push --force,而 force push 会覆盖别人的工作。
Python 新手专属 .gitignore —— 别把不该上传的也传上去
学 Python 的新手很容易犯一个错误:把虚拟环境、缓存文件、pyc 文件一股脑 add 上去。
在你的项目根目录下创建一个 .gitignore 文件,写入以下内容:
# Python __pycache__/ *.py[cod] *.so # 虚拟环境 venv/ .venv/ env/ # IDE .idea/ .vscode/ # 环境变量 .env
这些文件加到 .gitignore 里之后,Git 就会自动忽略它们,不会再出现在 git status 中。
一口气帮你总结完
把这几个命令串起来,Python 新手最常用的 Git 工作流就一句话:
# 每天开始写代码前 git pull # 写完一个小功能后 git add . git commit -m "描述你做了什么" # 一天结束前,推送到 GitHub git push
就这四步,每天循环。出问题了用 git status 看看状态,用 git log 查查历史,用 git reset 后悔。
最后说几个大实话:
第一,别被 Git 的几十个命令吓到。我写了五年 Python,日常用的就是这七八个。其他的(rebase、cherry-pick、stash 等)等你遇到具体场景再学,完全来得及。
第二,Git 最好的学习方式是先用起来。拿你手上正在做的 Python 小项目,init 一下,add 一下,commit 一下,push 到 GitHub。十分钟搞定,比看三个小时教程都管用。
第三,养成习惯比记命令重要。每天 pull-commit-push,刚开始可能觉得烦,但坚持两周你就会发现:再也不用给文件起名 main_v2.py、main_backup.py、main_final.py 了。
你的第一个 GitHub 仓库,现在就建起来吧。
长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等
▲扫描二维码-免费领取
推荐阅读
Python匿名函数4不要
Python猴子补丁是啥意思?
资深python开发者对新人的几条建议
Python 现在已经是两种非常相似的编程语言了