跟 Git 打交道的正确姿势

0 阅读4分钟

为什么要学 Git?

你肯定遇到过这种事:写代码写着写着,改乱了,想回到昨天那个能跑的样子,结果发现已经回不去了。或者跟同事一起改同一个文件,他改他的,你改你的,最后合并的时候乱七八糟。

Git 就是为了解决这些问题而生的。它帮你记住每个版本,也帮团队合并大家的修改

Git 到底“分布式”在哪?

很多人以为“分布式”就是代码分散在 GitHub、Gitee 多个网站上,其实不是。

真正的意思是:每个人电脑上都有一个完整的代码仓库,包含所有历史版本。你可以断网提交、断网看历史,完全不影响。等有网了再同步到远程仓库。

那 GitHub/Gitee/GitLab 是啥?
它们是远程仓库的托管服务,相当于一个大家公认的“中央交换站”,方便团队同步代码。Git 本身不依赖它们——你完全可以用 U 盘跟同事互相拷贝仓库来协作。

从一个空文件夹开始

假设你有个文件夹叫 learn_git,里面啥也没有。想让 Git 接管它:

bash

cd learn_git
git init

执行完,会多出一个 .git 隐藏文件夹。不要动它,里面存着所有的版本信息。你只要知道它在那,剩下的用 Git 命令操作就行。

第一个文件的版本

创建一个 readme.md,写点内容。此时 Git 知道这个文件存在吗?
用 git status 看一下——这是最常用的命令,任何操作前先敲它,准没错。

你会看到 readme.md 是红色的,标记为 untracked(未被跟踪)。意思是 Git 看到了这个文件,但还没把它纳入版本管理。

bash

git add readme.md   # 添加到暂存区
git commit -m "第一次提交,添加 readme"

add 就像把文件放进“待提交区”(暂存区),commit 才是真正拍一张快照,存进 .git 里。

执行完 commit,会看到类似这样的提示:

text

1 file changed, 2 insertions(+)

表示这次版本新增了 2 行内容。

让 Git 知道你是谁

每次提交都会记录是谁干的,所以要先设置用户名和邮箱(随便写,但最好用真实的):

bash

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

只要设置一次,以后的提交都会自动带上这个信息。

为什么要有一个远程仓库?

本地有版本控制已经很好了,但万一硬盘坏了呢?所以还是得备份到远程。

另外,团队协作时,大家需要约定一个地方来同步代码。GitHub、Gitee 就是干这个的。

添加远程仓库:

bash

git remote add origin https://github.com/你的用户名/仓库名.git
git push -u origin master

origin 是远程仓库的默认名字(可以改,但没人改)。master(或 main)是分支名。-u 是为了关联起来,以后直接 git push 就行。

多人协作最头疼的:冲突

假设你和同事同时改了同一个文件的同一行。他先提交到远程,你后提交,就会冲突。

流程大致这样:

  1. 你 git pull 拉取最新代码,Git 会告诉你:有冲突!
  2. 打开那个文件,会看到类似下面这种标记:

text

<<<<<<< HEAD
你写的内容
=======
同事写的内容
>>>>>>> branch-name
  1. 你和同事商量保留哪个(或者合并成新的内容),删掉 <<<<<<<=======>>>>>>> 这些标记。
  2. 保存文件,然后:

bash

git add 那个文件
git commit -m "解决冲突"
git push

冲突不可怕,解决一次就明白了。

一些自然的小建议

  • 频繁提交:完成一小块功能就提交,别攒一大坨。
  • 提交信息写清楚git commit -m "修复登录按钮点击无反应" 比 git commit -m "fix bug" 好一万倍。
  • push 前先 pull:养成习惯,减少冲突。
  • 别怕 .git 文件夹:你不知道的东西不乱动就行,Git 命令是安全的。

最后

Git 不难,刚接触会觉得命令有点多,但常用的就那么几个:initstatusaddcommitpushpullclone。多敲几次就条件反射了。

从今天开始,所有代码都用 Git 管理吧。哪怕只有一个人写,也能收获“随时穿越回昨天”的安全感。