那些动用过 、Codex 这类 AI 工具去编写代码的人, 都会存有一个错误认知!那就是关于 Git 命令, AI 已然全部替自己敲好了代码, 那自己还去学习它图什么呢。
前几天瞅见了个时长为40分钟的Git教程, 翻完之后才察觉到了一个情况: AI仅仅是你的手, 脑子仍然得是你本人的。倘若Git的理念没有彻底弄明白, 在AI帮你去执行指令的时候, 你就连“它究竟做了些什么”都讲不清楚, 要是出了问题就更不晓得该怎么挽救了。
这篇文章将那时长 40 分钟的内容,提炼成了 10 个核心概念, 看过之后就足够用了。

一、Git 到底在解决什么问题
写毕业论文的时候你肯定干过这事:
首先是论文_v1.docx, 接着变为了论文_v2.docx, 然后又成了论文_定稿.docx, 随后是论文_最终版.docx, 最后定名为论文_打死不改版.docx。
一个人去撰写论文, 若如此这般去做, 倒还能够勉强凑合。几十人, 成百上千个文件, 且每日修改几十次, 若靠手动去管版本, 这简直就是在自我毁灭。
对这事进行自动化处理的便是 Git, 你于一个文件夹中输入`git init`时, 会隐秘地创建出一个`.git`目录, 自那以后, 该文件夹的每一回改动都会被它悄然记录下来, 无论何时都能够“时光倒流”返回至过去的某个版本。
称为**仓库()**的是那种被 Git 所管控着的文件夹, 处于自己电脑之上的被称作本地仓库, 而传输到服务器上用于备份并且共享的则叫做远程仓库。
二、 跟 Git 不是一回事
好多人把这俩搞混。分开看:
– **Git**:版本控制工具,跑在你电脑上
– **Hub**:枢纽的意思
是以 Git 当作“通信协议”的代码托管网站, 你将本地的 Git 仓库推至其上, 全球的开发者皆能够看到、下载以及参与贡献。
Linux内核 有着众多特性 , Nginx 可实现特定功能 , 几乎所有你能够叫得出名字的开源项目 , 都在 某个地方 运行着。仓库 存在公开和私有两种类型 , 公开仓库的代码 能够随意查看 , 这便是开源的基础玩法。

三、:Git 最底层的单元
** 就是给当前所有文件拍一张"快照"。**
无论哪一回, Git 都会将当时全部文件呈现的模样予以记住。次数增多后, 便会串联成一条时间线:
→ → → → …
每个 有两个东西:
– ** **:用一句话写清楚这次改了什么
– ** ID**: 是一串自动生成的哈希值, 它被用来精确找到某一次提交。
于运用AI进行代码编写之际, 当一项功能完成之时便为一次。一旦出现问题, 你能够精准地确定究竟是哪一次所引入的, 这相较于“凭借翻代码靠猜测”可要靠谱许多了。
—
四、分支:代码版的"平行宇宙"
这是 Git 最漂亮的设计。
默认你存在一条被称作主分支的(main)。当需要增添新功能之际, 标准的操作是:
1. 从 main 那里, 拉出一个新的分支, 这个分支比如说叫做 `-login`。
2. 在这个分支上随便折腾——写代码、、改乱了重来
3. **main 分支纹丝不动,完全不受影响**
4. 大功告成的功能, 经过了全面测试, 现在要将分支, 也就是特地标记为**合并(Merge)**的那个分支, 回归到主分支 main 那里。
5. 删掉已经合并的分支
就仿佛你于“主宇宙”之外开辟出了一个“平行宇宙”, 在这个平行宇宙当中要是搞砸了并不会对主宇宙造成影响, 而要是搞好了随后再将成果带回。
有一个指针名为**HEAD**, 它所指向的是你当下所处的位置, 具体而言, 是你所在分支的特定之处, 只要你在那个分支的那个上, **HEAD**所处位置便与之相同, 就在哪里。
五、冲突是怎么来的
有两个分支, 它们修改了同一个文件, 且修改的是该文件的同一行, Git没办法知道应该留下哪一个, 这种情况就是冲突。
此际, Git 会停下, 让你抉择, 是保留哪一个版本, 还是两个版本都予以保留呢?
AI 时代处理冲突简单多了,你只要告诉 或者 :
保留由我在此处撰写的, 保留从那边传递过来的, 将这两者都留存着。
它协助你将冲突标记清理得一干二净。然而其前提是, 你必须清楚“冲突”这个事物本身究竟是什么, 不然的话, 你就连给AI下达指令的依据都不会有了。
—
六、本地和远程之间,就三个动作
把代码在本地仓库和 远程仓库之间搬运,一共就三个方向:
| 操作 | 干什么 | 方向 |
|——|——–|——|
获得远程仓库的完整副本, 将其放置到本地, 从远程到本地。
| **Push** | 将本地修改完成的推送至上面所说的那般, 从本地朝着远程的方向进行推送 | 本地 → 远程 |。
让本地获取到远程那最新的并拉下来, 是从远程到本地的操作 , 也就是叫做pull。
牵拉等于先进行抓取动作之后紧接着再开展合并动作的这两个动作的组合形式。
每日的流程总共是三步, 第一步去进行pull进行拉取最新的操作,第二步在本地开展编写代码的工作, 第三步把代码push推上去。

—
七、给开源项目贡献代码的标准姿势
瞅见一个挺不错的开源项目, 打算给它增添功能, 或者修复其中存在的bug, 千万别直接就在人家的仓库上面去进行修改。正确的流程是:
1. **Fork**:把原项目复制到你自己的 账号下
2. **Clone**:把自己账号下的副本下载到本地
3. 从建分支的角度来说, 千万不可以、绝对不应当直接在 main 这个分支上去进行修改操作, 务必要拉取一个全新的分支来开展相关工作。
4. 在新分支上改代码、、push
5. **建 Pull (PR)**:给原作者发起合并请求
6. **Code **:原作者看你的代码,可能让你改
7. **通过合并**:审核过了,你的代码就进了原项目
要是在审核的这段时间之内, 原本的项目又发生了更新的情况, 那么你必须要先将新出现的改动同步过来, 对于应该去解决的冲突就要进行解决, 如此之后再接着去等待审核。

八、写错了怎么办?三个后悔药
| 操作 | 什么时候用 | 安全程度 |
你提供的内容似乎不是一个有效的句子, 请提供可改写的完整句子。
| **** | 还没 ,想直接扔了修改 | 安全 |
是什么已经了, 是既想要退回, 却与此同时需要留存着记录, 且这种情况处于安全(推荐)的范畴。
已然如此了, 若想要强行进行回退, 这是存在危险的。
记住两条:
这里存在一种“反向操作”, 此操作要创建一个全新的事物, 其目的在于抵消掉之前所做出的改动, 并且历史记录是完整无缺的。在共享分支之上会运用这个“反向操作”。
– Reset 意味着“删历史”, 它会直接将记录抹掉。要是已经 push 到远程了, 那就千万别使用, 除非你甘愿被同事责骂。
九、三个进阶操作,知道就行
**Stash(暂存)**: 写代码写到一半的时候, 被喊去处理紧急情况, 可又不想就这么停下,怎么办呢? 那就进行stash操作, 把当下所做的修改暂时保存起来, 如此一来工作区就恢复到干净的状态了。等处理完那个紧急问题再切换回来, 通过stash pop操作把之前暂存的内容拿回来, 然后继续接着写代码。
(变基): 它和 Merge 一样属于合并分支的操作, 然而结果却存在差异, Merge 会保留分叉历史(呈现非线性), 将其“搬到”目标分支末尾再次放置一遍, 致使历史成为一条直线。虽说干净是不错的, 可**仅仅在你个人独自使用的分支上进行操作**, 在共享分支上切勿这样做。
**-pick(遴选)**: 你存在好些个 , 仅仅打算将其中特定的某几个“选取出来”放置到另外一个分支上去。恰似挑选樱桃那般 , 仅仅挑选你所意欲的。

十、回到开头的问题
AI 时代到底还要不要学 Git?
**要理解概念,不用死背命令。**
你讲出“开创一个名为 -login 的分支”, 人工智能为你运行命令 `git -b -login`。
你讲“将这个分支合并至main”,AI为你运行`git merge`。
你表述的是"将远程那儿最新的给拉取下来", AI会助力你去运行 `git pull`。
**但 AI 不会替你做的:**
– 什么时候该开分支?
– 冲突了留哪边?
– 用 Merge 还是 ?
– 回退用 还是 Reset?
这些事, 都是需要你展开决策行为的, AI仅仅是执行者, 而决策者始终都是你。
—
弄懂 10 个概念 , 它们分别是 、、、Merge 、、HEAD 、Clone/Push/Pull 、Fork+PR 、Stash//-pick 、//Reset , 其余的命令让 AI 去敲击。
—
本文是依据 Git 以及核心概念教程视频进行整理的, 那原始教程时长大概是 40 分钟。4F.ChiTaiBAo.XyZ
EF.ChiTaiBAo.XyZ
674.ChiTaiBAo.XyZ
407.ChiTaiBAo.XyZ
63D.ChiTaiBAo.XyZ
582.ChiTaiBAo.XyZ
654.ChiTaiBAo.XyZ
72D.ChiTaiBAo.XyZ
4A7.ChiTaiBAo.XyZ
5EFF.ChiTaiBAo.XyZ
ED.ChiTaiBAo.XyZ
F25F.ChiTaiBAo.XyZ
27.ChiTaiBAo.XyZ
120.ChiTaiBAo.XyZ
29A8.ChiTaiBAo.XyZ
91A.ChiTaiBAo.XyZ
4BAE.ChiTaiBAo.XyZ
B5.ChiTaiBAo.XyZ
A6.ChiTaiBAo.XyZ
04CA.ChiTaiBAo.XyZ
A5.ChiTaiBAo.XyZ
0BD0.ChiTaiBAo.XyZ
E77.ChiTaiBAo.XyZ
C8A.ChiTaiBAo.XyZ
4E5.ChiTaiBAo.XyZ
4B0F.ChiTaiBAo.XyZ
0F6.ChiTaiBAo.XyZ
C1.ChiTaiBAo.XyZ
C7.ChiTaiBAo.XyZ
C3C6.ChiTaiBAo.XyZ
4CE3.ChiTaiBAo.XyZ
96D.ChiTaiBAo.XyZ
604C.ChiTaiBAo.XyZ
30D5.ChiTaiBAo.XyZ
2A83.ChiTaiBAo.XyZ
03E.ChiTaiBAo.XyZ
816E.ChiTaiBAo.XyZ
7C.ChiTaiBAo.XyZ
12B8.ChiTaiBAo.XyZ
3D.ChiTaiBAo.XyZ
3A7A.ChiTaiBAo.XyZ
347.ChiTaiBAo.XyZ
103.ChiTaiBAo.XyZ
A5D7.ChiTaiBAo.XyZ
87CA.ChiTaiBAo.XyZ
69F.ChiTaiBAo.XyZ
6C.ChiTaiBAo.XyZ
2EA.ChiTaiBAo.XyZ
9440.ChiTaiBAo.XyZ
811.ChiTaiBAo.XyZ
5A86.ChiTaiBAo.XyZ
2E1.ChiTaiBAo.XyZ
AA.ChiTaiBAo.XyZ
F860.ChiTaiBAo.XyZ
6CD1.ChiTaiBAo.XyZ
70.ChiTaiBAo.XyZ
EC76.ChiTaiBAo.XyZ
644.ChiTaiBAo.XyZ
6EDC.ChiTaiBAo.XyZ
BD3.ChiTaiBAo.XyZ
289.ChiTaiBAo.XyZ
45C4.ChiTaiBAo.XyZ
22C4.ChiTaiBAo.XyZ
412.ChiTaiBAo.XyZ
031.ChiTaiBAo.XyZ
F8AC.ChiTaiBAo.XyZ
055.ChiTaiBAo.XyZ
1ECE.ChiTaiBAo.XyZ
A1.ChiTaiBAo.XyZ
18C5.ChiTaiBAo.XyZ
4975.ChiTaiBAo.XyZ
691F.ChiTaiBAo.XyZ
186E.ChiTaiBAo.XyZ
675C.ChiTaiBAo.XyZ
06EE.ChiTaiBAo.XyZ
E882.ChiTaiBAo.XyZ
2F.ChiTaiBAo.XyZ
F97.ChiTaiBAo.XyZ
5BC.ChiTaiBAo.XyZ
06A.ChiTaiBAo.XyZ
56.ChiTaiBAo.XyZ
F1E2.ChiTaiBAo.XyZ
DF02.ChiTaiBAo.XyZ
11.ChiTaiBAo.XyZ
B74.ChiTaiBAo.XyZ
7BC.ChiTaiBAo.XyZ
9D56.ChiTaiBAo.XyZ
49.ChiTaiBAo.XyZ
E15.ChiTaiBAo.XyZ
9A74.ChiTaiBAo.XyZ
BBBB.ChiTaiBAo.XyZ
BD71.ChiTaiBAo.XyZ
7141.ChiTaiBAo.XyZ
3FF.ChiTaiBAo.XyZ
01CC.ChiTaiBAo.XyZ
94F.ChiTaiBAo.XyZ
7DB3.ChiTaiBAo.XyZ
B0B.ChiTaiBAo.XyZ
AD5.ChiTaiBAo.XyZ
7F.ChiTaiBAo.XyZ
1F0A.ChiTaiBAo.XyZ
0411.ChiTaiBAo.XyZ
419.ChiTaiBAo.XyZ
12.ChiTaiBAo.XyZ
260.ChiTaiBAo.XyZ
3F3.ChiTaiBAo.XyZ
61D.ChiTaiBAo.XyZ
696C.ChiTaiBAo.XyZ
D42.ChiTaiBAo.XyZ
B0FD.ChiTaiBAo.XyZ
CA83.ChiTaiBAo.XyZ
3C0.ChiTaiBAo.XyZ
89C6.ChiTaiBAo.XyZ
3CA.ChiTaiBAo.XyZ
37.ChiTaiBAo.XyZ
6D.ChiTaiBAo.XyZ
AF3.ChiTaiBAo.XyZ
B9D1.ChiTaiBAo.XyZ
4BF.ChiTaiBAo.XyZ
471.ChiTaiBAo.XyZ
A7C.ChiTaiBAo.XyZ
82.ChiTaiBAo.XyZ
0DE.ChiTaiBAo.XyZ
1909.ChiTaiBAo.XyZ
9470.ChiTaiBAo.XyZ
BAF9.ChiTaiBAo.XyZ
4B14.ChiTaiBAo.XyZ
C7A.ChiTaiBAo.XyZ
A04A.ChiTaiBAo.XyZ
CBD.ChiTaiBAo.XyZ
2329.ChiTaiBAo.XyZ
64.ChiTaiBAo.XyZ
C004.ChiTaiBAo.XyZ
106.ChiTaiBAo.XyZ
AF57.ChiTaiBAo.XyZ
EB.ChiTaiBAo.XyZ
7838.ChiTaiBAo.XyZ
A35.ChiTaiBAo.XyZ
5C5.ChiTaiBAo.XyZ
CEB.ChiTaiBAo.XyZ
BF7E.ChiTaiBAo.XyZ
9452.ChiTaiBAo.XyZ
C787.ChiTaiBAo.XyZ
FEB3.ChiTaiBAo.XyZ
F84.ChiTaiBAo.XyZ
5F35.ChiTaiBAo.XyZ
FE08.ChiTaiBAo.XyZ
0ACA.ChiTaiBAo.XyZ
0F3.ChiTaiBAo.XyZ
52D.ChiTaiBAo.XyZ
0B2.ChiTaiBAo.XyZ
20C6.ChiTaiBAo.XyZ
B8.ChiTaiBAo.XyZ
EAE5.ChiTaiBAo.XyZ
C80.ChiTaiBAo.XyZ
C941.ChiTaiBAo.XyZ
28.ChiTaiBAo.XyZ
2EF3.ChiTaiBAo.XyZ
F448.ChiTaiBAo.XyZ
C4.ChiTaiBAo.XyZ
2A89.ChiTaiBAo.XyZ
2B.ChiTaiBAo.XyZ
D9.ChiTaiBAo.XyZ
157A.ChiTaiBAo.XyZ
C82.ChiTaiBAo.XyZ
BD.ChiTaiBAo.XyZ
A64.ChiTaiBAo.XyZ
63A2.ChiTaiBAo.XyZ
DC.ChiTaiBAo.XyZ
A131.ChiTaiBAo.XyZ
B6.ChiTaiBAo.XyZ
76.ChiTaiBAo.XyZ
1C2.ChiTaiBAo.XyZ
86E.ChiTaiBAo.XyZ
1871.ChiTaiBAo.XyZ
AEB.ChiTaiBAo.XyZ
112.ChiTaiBAo.XyZ
0F5A.ChiTaiBAo.XyZ
53.ChiTaiBAo.XyZ
9244.ChiTaiBAo.XyZ
3C.ChiTaiBAo.XyZ
7379.ChiTaiBAo.XyZ
D8F.ChiTaiBAo.XyZ
22E.ChiTaiBAo.XyZ
780.ChiTaiBAo.XyZ
8D7.ChiTaiBAo.XyZ
AC2.ChiTaiBAo.XyZ
D23D.ChiTaiBAo.XyZ
2E.ChiTaiBAo.XyZ
8DC.ChiTaiBAo.XyZ
DB0B.ChiTaiBAo.XyZ
9BD.ChiTaiBAo.XyZ
ED2.ChiTaiBAo.XyZ
9CC5.ChiTaiBAo.XyZ
18E9.ChiTaiBAo.XyZ
7C1.ChiTaiBAo.XyZ
D7E.ChiTaiBAo.XyZ
E7B.ChiTaiBAo.XyZ
78A.ChiTaiBAo.XyZ
AB2.ChiTaiBAo.XyZ
46.ChiTaiBAo.XyZ
98B.ChiTaiBAo.XyZ
781A.ChiTaiBAo.XyZ
25.ChiTaiBAo.XyZ
41A8.ChiTaiBAo.XyZ
3DD6.ChiTaiBAo.XyZ
F64.ChiTaiBAo.XyZ
A89.ChiTaiBAo.XyZ
63.ChiTaiBAo.XyZ
A01.ChiTaiBAo.XyZ
6AE9.ChiTaiBAo.XyZ
962.ChiTaiBAo.XyZ
D46D.ChiTaiBAo.XyZ
B332.ChiTaiBAo.XyZ
B20.ChiTaiBAo.XyZ
21.ChiTaiBAo.XyZ
04A.ChiTaiBAo.XyZ
8CE.ChiTaiBAo.XyZ



