日常用的 Git,其实就这几步:进仓库、记下修改、看历史、必要时退回去。下面按这条线串一遍。
从空目录到第一次提交
git init
git add README.md
git commit -m "初始化仓库"
git log --onelineadd 是把修改放进暂存区,commit 是把暂存区做成一次提交。Git 跟踪的是修改,不是「这个文件曾经 add 过就永远跟着走」。add 之后又改了文件,要再 git add 一次,否则第二次改动进不了这次 commit。
工作区、暂存区、版本库
能直接看到的目录是工作区。.git 是版本库,里面有暂存区(stage / index),以及当前分支和 HEAD。
常见路径:
- 改文件(只在工作区)
git add(进暂存区)git commit(进当前分支)
回退
HEAD 是当前提交。上一次是 HEAD^,往上 100 次是 HEAD~100。
git reset --hard HEAD^
git reset --hard <commit>--hard 会改工作区,未提交的改动会丢。只想挪分支指针、保住工作区,用 --soft 或默认的 mixed。
git log 看不见已经离开的提交时,用 git reflog。它记下你本机 HEAD 的移动,短 SHA 能对上就可以拿来 reset --hard。
已经推到远端、还要改远端历史:
git push --force-with-lease origin <branch>强制推会改别人已经拉下去的历史。共享分支上尽量不用;不得已时用 --force-with-lease,比裸 -f 安全一点。
撤销还没提交的改动
没 add:
git restore -- path/to/file老写法是 git checkout -- path/to/file。效果是:文件回到最近一次 add 或 commit 的样子。
已经 add、还没 commit:
git restore --staged path/to/file老写法:git reset HEAD path/to/file。修改回到工作区,暂存区清掉。
删文件
工作区删了以后,版本库还在:
git rm path/to/file
git commit -m "删除文件"删错了、版本库里还有:
git restore -- path/to/file从未 add 过就删掉的文件,Git 救不回来。
和远程关联
git remote add origin git@github.com:<user>/<repo>.git
git push -u origin main-u 只需要第一次,用来把本地分支和远端分支绑在一起。之后 git push / git pull 即可。
远端已有仓库,本地从头开始:
git clone git@github.com:<user>/<repo>.gitHTTPS 在只开放 443 的网络里更好用,但每次推都可能要口令。能走 SSH 就走 SSH。