零基础学Git:图文并茂的入门教程 – wiki基地


零基础学Git:图文并茂的终极入门教程

你好,未来的代码掌控者!

你是否曾经历过这样的噩梦:为了一个项目,你的文件夹里堆满了 “报告_v1.doc”, “报告_v2_最终版.doc”, “报告_v3_打死不改版.doc” 还有 “报告_v4_真的最终版.doc”?或者,在写代码时,你小心翼翼地改动,生怕一不小心就让整个程序崩溃,再也回不到之前的样子?更糟糕的是,当你和朋友一起合作一个项目时,你们通过QQ或邮件传来传去,最后谁也不知道哪个才是最新版本,谁修改了什么?

如果这些场景让你感同身受,那么恭喜你,你即将学习的工具——Git——正是解决这些问题的终极神器。

本文将以最通俗易懂的方式,带你从零开始,一步步踏入Git的世界。我们将用大量的比喻和模拟的“图示”来帮助你理解。准备好了吗?让我们开始这场时间旅行与协同合作的冒险吧!

第一章:思想准备——Git到底是个什么东西?

在敲下任何代码之前,我们必须先建立正确的“心智模型”。

错误理解: Git是一个复杂的、只有黑客大神才会用的命令行工具。
正确理解: Git本质上是一个 “超级厉害的游戏存档系统”

想象一下你在玩一个大型角色扮演游戏(比如《塞尔达传说》或《艾尔登法环》)。

  • 你的项目文件夹,就是你的 游戏世界
  • 你每次 写代码或写文档,就像在游戏世界里 打怪、升级、探索
  • 当你完成了一个小功能,觉得“嗯,这个状态很不错,值得保存一下”,你就可以使用Git进行一次 “存档”。这个“存档”动作在Git里叫做 commit (提交)
  • Git会帮你把这个“存档”完美地保存下来,并附上你的“存档说明”(比如:“修复了登录Bug”)。
  • 如果你不小心把代码改坏了,别担心!你可以随时 “读档”,回到之前任何一个你觉得完美的状态。
  • 更厉害的是,你可以开一个 “平行世界” 去尝试一些危险的操作(比如一个全新的功能),这个“平行世界”在Git里叫做 branch (分支)。你在分支里做的任何事,都不会影响到你的主游戏世界。当你觉得新功能OK了,可以再把这个“平行世界”的成果 “合并” (merge) 回你的主世界。
  • 当你和朋友一起玩时,你们每个人都有自己完整的游戏世界和所有存档。你们可以把自己的新探索(代码)“推送” (push) 到一个中央服务器(比如GitHub),朋友再从服务器上 “拉取” (pull) 你的成果。

所以,忘掉那些高深莫测的术语,记住:Git = 游戏存档系统。它帮你记录每一次变化,让你随时可以回到过去,并且能安全地和他人协作。

第二章:初入江湖——安装与初次设置

光说不练假把式。现在,让我们在你的电脑上安装Git。

2.1 安装Git

  • Windows用户: 访问 Git for Windows 官网,下载并安装。安装过程中,一路点击“Next”即可,使用默认选项对新手最友好。安装完成后,在任意位置右键,如果看到 “Git Bash Here” 和 “Git GUI Here” 两个选项,就代表安装成功了。我们主要使用 Git Bash,它是一个模拟的Linux命令行环境。
  • Mac用户: 最简单的方式是安装Xcode Command Line Tools。打开“终端(Terminal)”,输入 git --version。如果系统提示你安装,就按提示操作。或者,你也可以使用 Homebrew 来安装,命令是 brew install git
  • Linux用户: 对于Debian/Ubuntu系统,打开终端输入 sudo apt-get install git。对于Fedora/CentOS系统,输入 sudo yum install git

安装完成后,打开你的命令行工具(Windows用Git Bash,Mac/Linux用终端),输入 git --version,如果能看到版本号,就说明你已经成功迈出了第一步!

2.2 “新手村”的报到登记:配置用户信息

安装好Git后,你需要做的第一件事,就是告诉Git你是谁。这就像在游戏里创建角色,需要起个名字。这样,你未来的每一次“存档”(commit),Git都会记录下来是你干的。

在命令行里输入以下两条指令,并换成你自己的名字和邮箱:

bash
git config --global user.name "Your Name"
git config --global user.email "[email protected]"

  • --global 参数表示这台电脑上所有的Git项目都会使用这个配置。

想检查一下是否配置成功?输入:

bash
git config --list

你会看到一系列配置信息,确保其中有你的 user.nameuser.email 即可。

第三章:开天辟地——你的第一个本地仓库

现在,让我们创建一个项目,并用Git来管理它。

3.1 核心概念图解

在动手之前,我们必须理解Git工作的三个“区域”。这是Git的精髓所在,理解了它,你就理解了Git的一半。

+-------------------------------------------------------------+
| |
| 你的项目文件夹 (例如: /d/my-first-project/) |
| |
| +---------------------+ git add +----------------+ |
| | | -----------> | | |
| | 工作区 (Working | | 暂存区 (Staging | |
| | Directory) | <----------- | Area) | |
| | | git restore | | |
| | (你实际编辑文件 | | (你的“购物车”) | |
| | 的地方) | | | |
| +---------------------+ +----------------+ |
| ^ | |
| | | git commit |
| | git checkout / restore | |
| | v |
| +-------------------------------------------------------+ |
| | | |
| | Git仓库 (.git 文件夹 / Repository) | |
| | (你的“存档记录室”,保存所有历史版本) | |
| +-------------------------------------------------------+ |
| |
+-------------------------------------------------------------+

  1. 工作区 (Working Directory): 就是你在电脑里能看到的那个项目文件夹,你所有的日常编辑工作都在这里发生。
  2. 暂存区 (Staging Area): 这是一个非常重要的中间区域。把它想象成超市的 “购物车”。当你修改了一些文件,你觉得“这个改动不错,我准备一会儿一起结账”,你就把这个文件 add 到购物车里。你可以多次add,把多个文件的改动都放进购物车。
  3. Git仓库 (Repository): 这是你的“存档记录室”,里面有一个隐藏的 .git 文件夹,存放了你项目的所有历史版本和元数据。当你觉得购物车里的东西都齐了,就可以执行 commit,这相当于去收银台 “结账”,把购物车里所有的东西拍一张快照,永久地存入你的存档记录室。

核心流程就是: 在工作区修改 -> 将满意的修改放入暂存区 -> 一次性将暂存区的所有内容提交到仓库。

3.2 实战演练:创建你的“Hello Git”项目

  1. 创建项目文件夹
    在你的电脑上找个合适的位置,创建一个新文件夹,比如 my-first-project

  2. 进入文件夹并初始化仓库
    打开你的命令行工具(Git Bash),进入这个文件夹。
    bash
    # `cd` 命令是 "change directory" 的意思
    cd /d/my-first-project # 注意:请替换成你自己的文件夹路径

    现在,我们来施展魔法,让Git接管这个文件夹。
    bash
    git init

    你会看到类似 Initialized empty Git repository in D:/my-first-project/.git/ 的提示。这意味着Git在你当前目录下创建了一个隐藏的 .git 文件夹。这个文件夹就是你的本地仓库,你的所有“存档”都会保存在这里。千万不要手动修改它!

  3. 创建第一个文件并查看状态
    my-first-project 文件夹里,创建一个名为 readme.txt 的文件,里面写上一句 “Hello, Git!”。
    现在,回到命令行,输入Git中最常用、最重要的命令:
    bash
    git status

    这个命令就像是你的“项目状态雷达”,它会告诉你当前三个区域的情况。你会看到类似下面的输出:
    On branch master
    No commits yet
    Untracked files:
    (use "git add <file>..." to include in what will be committed)
    readme.txt
    nothing added to commit but untracked files present (use "git add" to track)

    解读:

    • On branch master: 你当前在名为 “master”(有些新版Git会叫 “main”)的主分支上。
    • No commits yet: 仓库里还没有任何存档。
    • Untracked files: Git发现了一个它不认识的新文件 readme.txt。它正处于 工作区,但还没被Git追踪。
  4. 将文件放入“购物车”(暂存区)
    根据提示,我们使用 git add 命令,把 readme.txt 放入暂存区。
    bash
    git add readme.txt

    执行完这个命令后,什么提示都没有?这是好事,在命令行世界里,“没有消息就是好消息”。我们再用“雷达”扫一下:
    bash
    git status

    输出变了:
    On branch master
    No commits yet
    Changes to be committed:
    (use "git rm --cached <file>..." to unstage)
    new file: readme.txt

    解读:

    • Changes to be committed: 告诉你有改动 等待被提交
    • new file: readme.txt: readme.txt 现在在 暂存区 了!它已经从“不认识的文件”变成了“准备存档的新文件”。
  5. “结账存档”(提交到仓库)
    购物车里的东西选好了,我们现在就去“结账”,生成第一个存档。
    bash
    git commit -m "Create my first file: readme.txt"

    • git commit: 这就是提交命令。
    • -m "...": -m 参数表示 “message”,后面引号里的内容是本次提交的说明。写好提交说明是一个极其重要的习惯! 它能让你在未来快速了解这次存档都干了什么。

    提交后,你会看到类似这样的输出:
    [master (root-commit) 1a2b3c4] Create my first file: readme.txt
    1 file changed, 1 insertion(+)
    create mode 100644 readme.txt

    这表示你成功创建了一个存档!现在,我们再用“雷达”看看:
    bash
    git status

    输出:
    On branch master
    nothing to commit, working tree clean

    “工作树干净”,说明你的工作区、暂存区和仓库最新版本完全一致。完美!

  6. 查看“存档历史”
    想看看你的存档记录吗?使用 git log 命令:
    bash
    git log

    输出会是这样:
    “`
    commit 1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t (HEAD -> master)
    Author: Your Name your.email@example.com
    Date: Mon Feb 20 10:00:00 2024 +0800

    Create my first file: readme.txt
    

    ``
    **解读:**
    *
    commit 1a2b…: 这一长串是本次提交的唯一ID,就像是存档的序列号。
    *
    AuthorDate: 你在配置时设置的作者和提交时间。
    *
    Create my first file: readme.txt`: 你写的提交说明。

    如果你觉得信息太多,可以试试简化版: git log --oneline

恭喜!你已经掌握了Git最核心的本地工作流:修改 -> add -> commit

第四章:时光倒流——撤销修改与版本回退

Git最强大的功能之一就是“后悔药”。

场景一:改动在工作区,还没add

你在 readme.txt 里加了一行 “Oops, this is a mistake.”,然后保存。
此时运行 git status,它会提示 Changes not staged for commit: modified: readme.txt
你突然意识到这行是多余的,想撤销。怎么办?
“`bash

Git 2.23版本及以后,推荐使用restore

git restore readme.txt

或者使用老版本的checkout命令

git checkout — readme.txt
``
这条命令会用暂存区(如果暂存区有)或上一个commit的版本,来覆盖掉你工作区的修改。打开
readme.txt`,你会发现那句多余的话已经消失了。

场景二:改动已经add到暂存区,但还没commit

你在 readme.txt 里加了一行 “This is a feature.”,并且执行了 git add readme.txt
此时 git status 会显示 Changes to be committed: modified: readme.txt
你突然觉得这个功能不应该现在加,想把它从“购物车”(暂存区)里拿出来,放回“货架”(工作区)。
“`bash

Git 2.23版本及以后,推荐使用restore

git restore –staged readme.txt

或者使用老版本的reset命令

git reset HEAD readme.txt
``
执行后,再
git status,你会发现readme.txt的状态又变回了Changes not staged for commit。它回到了场景一的状态,你可以选择编辑它,或者用git restore readme.txt` 彻底丢弃修改。

场景三:已经commit了,想彻底回到过去的某个版本

假设你已经提交了好几个版本:
* Commit C: “Add a terrible bug” (HEAD -> master)
* Commit B: “Add a new feature”
* Commit A: “Initial commit”

你发现Commit C是个灾难,你想让项目彻底回到Commit B的状态。
首先,用 git log --oneline 找到Commit B的ID,比如是 f5d6a7b
然后,执行“终极大法”(此操作会丢弃之后的所有修改,请谨慎使用!):
bash
git reset --hard f5d6a7b

执行后,你的项目文件夹、暂存区、仓库历史,都会瞬间回到Commit B完成时的状态。Commit C就像从未存在过一样(虽然通过一些高级命令还能找回,但对初学者来说可以认为它消失了)。

第五章:协同作战——连接远程仓库 (GitHub)

本地玩得再溜,也只是单机游戏。Git的魅力在于协作。这就需要一个中央服务器,大家熟知的 GitHub 就是这样一个“游戏大厅”。

5.1 创建GitHub仓库并连接

  1. 注册GitHub账号: 如果你还没有,去 github.com 注册一个。
  2. 创建新仓库: 登录后,点击右上角的 + 号,选择 New repository
    • Repository name: 最好和你的本地文件夹名一致,比如 my-first-project
    • Description: 简单描述一下你的项目。
    • Public/Private: Public 是公开的,任何人都能看;Private 是私有的。新手练习选哪个都行。
    • 不要勾选 “Add a README file”, “Add .gitignore”, “Choose a license”。因为我们本地已经有项目了,要创建一个“空”的远程仓库来接收它。
  3. 点击 Create repository

创建成功后,你会看到一个页面,上面有一些指令。找到 “…or push an existing repository from the command line” 这部分,这正是我们需要的。

它会给你两条命令,我们来执行一下:

第一步:告诉本地仓库,远程服务器在哪。
“`bash

从GitHub页面复制过来的URL,每个人的都不同

git remote add origin https://github.com/YourUsername/my-first-project.git
``
*
git remote add: 添加一个远程仓库的地址。
*
origin: 这是给远程地址起的一个别名,叫origin` 是一个惯例,你也可以叫别的,但没必要。

第二步:把本地的“存档”推送到远程服务器。
“`bash
git push -u origin master

如果你的主分支是 main,就用 git push -u origin main

``
*
git push: 推送!
*
origin: 推送到名为origin的远程服务器。
*
master: 推送本地的master分支。
*
-u: 这个参数只在第一次推送时需要。它会把本地的master分支和远程的master分支关联起来,以后你再推送,直接输入git push` 就行了。

执行后,系统可能会提示你输入GitHub的用户名和密码(或者Token,根据你的安全设置)。输入正确后,等待上传完成。

现在,刷新你的GitHub仓库页面,你会惊喜地发现,你的 readme.txt 文件和提交历史已经原封不动地出现在了网页上!

5.2 克隆与拉取:从远程获取项目

想象一下,你的朋友想加入你的项目,或者你想在另一台电脑上继续工作。
你只需要去GitHub项目页面,点击绿色的 Code 按钮,复制那个HTTPS地址。
然后在你的命令行里,找一个空文件夹,执行:
bash
git clone https://github.com/YourUsername/my-first-project.git

Git会自动把整个项目(包括所有历史记录)下载到你的电脑上。

如果远程仓库有了更新(比如你朋友推送了新代码),而你想把这些更新同步到你的本地,只需要在你的项目文件夹里执行:
bash
git pull

Git会自动去 origin 服务器上抓取最新的改动,并与你的本地文件合并。

第六章:神技——分支 (Branching)

这是Git的“杀手级”功能,也是我们之前比喻的“平行世界”。

6.1 为什么要用分支?

假设你的主分支 master 是一个稳定运行的正式版本。现在,你要开发一个“用户登录”的新功能。如果你直接在 master 上改,万一改到一半,代码有bug,整个项目都不能用了,这就很尴尬。

正确的做法是:
1. 创建一个名为 feature-login 的新分支。
2. 切换到这个新分支上进行开发。
3. 你在 feature-login 分支上的所有 addcommit 都只存在于这个分支,完全不影响 master 分支。master 分支依然是那个干净、稳定的版本。
4. 当“用户登录”功能全部开发完成、测试通过后,再把它合并回 master 分支。

6.2 分支实战

1. 查看当前分支
bash
git branch

输出会是 * master,星号表示你当前所在的分支。

2. 创建并切换到新分支
“`bash

创建一个名为 feature-login 的分支

git branch feature-login

切换到这个新分支

git checkout feature-login
更快捷的方式是,创建并切换一步到位:bash
git checkout -b feature-login
``
现在再运行
git branch,你会看到* feature-loginmaster,星号在feature-login` 前面。

3. 在新分支上工作
现在,你可以大胆地修改代码了。比如,在 readme.txt 中加入一行 “Adding login feature…”,然后 git add .git commit -m "Work on login feature"
这个提交只属于 feature-login 分支。

4. 切换回主分支
bash
git checkout master

打开 readme.txt,你会发现那行 “Adding login feature…” 不见了!因为 master 分支上并没有那次提交。

5. 合并分支
假设你的登录功能已经开发完毕。现在,我们要把 feature-login 的成果合并到 master
首先,确保你当前在接收方分支上,也就是 master
“`bash

确认当前在master分支

git checkout master

执行合并

git merge feature-login
``
执行后,你会看到
readme.txt的内容被更新了!feature-login分支上的所有提交历史,现在都融入了master` 分支。

6. 删除已合并的分支
功能合并后,这个特性分支通常就没用了,可以删掉,保持仓库整洁。
bash
git branch -d feature-login

关于合并冲突 (Merge Conflict)
如果在两个分支上,你修改了同一个文件的同一行,那么在合并时Git就不知道该听谁的了。它会停下来,告诉你“有冲突!”,并在冲突文件中用 <<<<<, =====, >>>>> 标记出不同分支的内容。你需要做的就是:
1. 手动打开这个文件。
2. 决定要保留哪部分代码,或者都保留,或者写个新的。
3. 删除掉Git添加的那些标记符号。
4. 保存文件后,重新 git addgit commit 来完成这次合并。

结语:你的Git之旅才刚刚开始

如果你能跟着这篇教程一路走到这里,恭喜你,你已经不再是Git的“零基础”小白了。你已经掌握了90%日常工作中最常用的Git操作。

我们回顾一下最重要的命令:
* 配置: git config
* 初始化: git init
* 核心本地流: git status, git add, git commit
* 查看历史: git log
* 撤销: git restore, git reset
* 远程协作: git clone, git pull, git push
* 分支: git branch, git checkout, git merge

Git是一个博大精深的工具,但你不必一次性全部掌握。今天学到的这些,已经足够让你在个人项目和团队协作中游刃有余。接下来,你可以去探索 .gitignore 文件(用来忽略不想提交的文件)、图形化界面工具(如Sourcetree, VS Code的Git插件)、变基 rebase 等更高级的主题。

最重要的一点:多用,多练! 在你自己的项目里,勇敢地去创建分支,去提交,去回滚。Git就是你的安全网,它会保护你的每一次尝试。

现在,去开启你作为“代码掌控者”的旅程吧!祝你好运!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部