为什么要学 Git?
你肯定遇到过这种事:写代码写着写着,改乱了,想回到昨天那个能跑的样子,结果发现已经回不去了。或者跟同事一起改同一个文件,他改他的,你改你的,最后合并的时候乱七八糟。
Git 就是为了解决这些问题而生的。它帮你记住每个版本 ,也帮团队合并大家的修改。
Git 到底"分布式"在哪?
很多人以为"分布式"就是代码分散在 GitHub、Gitee 多个网站上,其实不是。
真正的意思是:每个人电脑上都有一个完整的代码仓库,包含所有历史版本。你可以断网提交、断网看历史,完全不影响。等有网了再同步到远程仓库。
那 GitHub/Gitee/GitLab 是啥?
它们是远程仓库的托管服务,相当于一个大家公认的"中央交换站",方便团队同步代码。Git 本身不依赖它们------你完全可以用 U 盘跟同事互相拷贝仓库来协作。
从一个空文件夹开始
假设你有个文件夹叫 learn_git,里面啥也没有。想让 Git 接管它:
bash
bash
cd learn_git
git init
执行完,会多出一个 .git 隐藏文件夹。不要动它,里面存着所有的版本信息。你只要知道它在那,剩下的用 Git 命令操作就行。
第一个文件的版本
创建一个 readme.md,写点内容。此时 Git 知道这个文件存在吗?
用 git status 看一下------这是最常用的命令,任何操作前先敲它,准没错。
你会看到 readme.md 是红色的,标记为 untracked(未被跟踪)。意思是 Git 看到了这个文件,但还没把它纳入版本管理。
bash
csharp
git add readme.md # 添加到暂存区
git commit -m "第一次提交,添加 readme"
add 就像把文件放进"待提交区"(暂存区),commit 才是真正拍一张快照,存进 .git 里。
执行完 commit,会看到类似这样的提示:
text
scss
1 file changed, 2 insertions(+)
表示这次版本新增了 2 行内容。
让 Git 知道你是谁
每次提交都会记录是谁干的,所以要先设置用户名和邮箱(随便写,但最好用真实的):
bash
arduino
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
只要设置一次,以后的提交都会自动带上这个信息。
为什么要有一个远程仓库?
本地有版本控制已经很好了,但万一硬盘坏了呢?所以还是得备份到远程。
另外,团队协作时,大家需要约定一个地方来同步代码。GitHub、Gitee 就是干这个的。
添加远程仓库:
bash
csharp
git remote add origin https://github.com/你的用户名/仓库名.git
git push -u origin master
origin 是远程仓库的默认名字(可以改,但没人改)。master(或 main)是分支名。-u 是为了关联起来,以后直接 git push 就行。
多人协作最头疼的:冲突
假设你和同事同时改了同一个文件的同一行。他先提交到远程,你后提交,就会冲突。
流程大致这样:
- 你
git pull拉取最新代码,Git 会告诉你:有冲突! - 打开那个文件,会看到类似下面这种标记:
text
markdown
<<<<<<< HEAD
你写的内容
=======
同事写的内容
>>>>>>> branch-name
- 你和同事商量保留哪个(或者合并成新的内容),删掉
<<<<<<<、=======、>>>>>>>这些标记。 - 保存文件,然后:
bash
sql
git add 那个文件
git commit -m "解决冲突"
git push
冲突不可怕,解决一次就明白了。
一些自然的小建议
- 频繁提交:完成一小块功能就提交,别攒一大坨。
- 提交信息写清楚 :
git commit -m "修复登录按钮点击无反应"比git commit -m "fix bug"好一万倍。 - push 前先 pull:养成习惯,减少冲突。
- 别怕 .git 文件夹:你不知道的东西不乱动就行,Git 命令是安全的。
最后
Git 不难,刚接触会觉得命令有点多,但常用的就那么几个:init、status、add、commit、push、pull、clone。多敲几次就条件反射了。
从今天开始,所有代码都用 Git 管理吧。哪怕只有一个人写,也能收获"随时穿越回昨天"的安全感。