Skip to content

日常用的 Git,其实就这几步:进仓库、记下修改、看历史、必要时退回去。下面按这条线串一遍。

从空目录到第一次提交 ​

bash
git init
git add README.md
git commit -m "初始化仓库"
git log --oneline

add 是把修改放进暂存区,commit 是把暂存区做成一次提交。Git 跟踪的是修改,不是「这个文件曾经 add 过就永远跟着走」。add 之后又改了文件,要再 git add 一次,否则第二次改动进不了这次 commit。

工作区、暂存区、版本库 ​

能直接看到的目录是工作区。.git 是版本库,里面有暂存区(stage / index),以及当前分支和 HEAD。

常见路径:

  1. 改文件(只在工作区)
  2. git add(进暂存区)
  3. git commit(进当前分支)

回退 ​

HEAD 是当前提交。上一次是 HEAD^,往上 100 次是 HEAD~100。

bash
git reset --hard HEAD^
git reset --hard <commit>

--hard 会改工作区,未提交的改动会丢。只想挪分支指针、保住工作区,用 --soft 或默认的 mixed。

git log 看不见已经离开的提交时,用 git reflog。它记下你本机 HEAD 的移动,短 SHA 能对上就可以拿来 reset --hard。

已经推到远端、还要改远端历史:

bash
git push --force-with-lease origin <branch>

强制推会改别人已经拉下去的历史。共享分支上尽量不用;不得已时用 --force-with-lease,比裸 -f 安全一点。

撤销还没提交的改动 ​

没 add:

bash
git restore -- path/to/file

老写法是 git checkout -- path/to/file。效果是:文件回到最近一次 add 或 commit 的样子。

已经 add、还没 commit:

bash
git restore --staged path/to/file

老写法:git reset HEAD path/to/file。修改回到工作区,暂存区清掉。

删文件 ​

工作区删了以后,版本库还在:

bash
git rm path/to/file
git commit -m "删除文件"

删错了、版本库里还有:

bash
git restore -- path/to/file

从未 add 过就删掉的文件,Git 救不回来。

和远程关联 ​

bash
git remote add origin git@github.com:<user>/<repo>.git
git push -u origin main

-u 只需要第一次,用来把本地分支和远端分支绑在一起。之后 git push / git pull 即可。

远端已有仓库,本地从头开始:

bash
git clone git@github.com:<user>/<repo>.git

HTTPS 在只开放 443 的网络里更好用,但每次推都可能要口令。能走 SSH 就走 SSH。

测试开发工程师 · 专注自动化与系统架构 | 邮箱: hansblog@atumsoul.win