Skip to content

Git Cheat Sheet

Git 基本概念回顾

  • 工作区 (Workspace):你正在编辑的文件目录。
  • 暂存区 (Index / Stage):一个临时的存储区域,用于存放你准备提交的更改。
  • 本地仓库 (Local Repository):你本地机器上的完整项目历史记录。
  • 远程仓库 (Remote Repository):托管在网络服务器上的项目仓库,用于团队协作。
  • HEAD:一个指针,通常指向当前所在的分支的最新提交。

初始化与配置 (Initialization & Configuration)

命令描述
git init在当前目录下创建一个新的 Git 仓库。
git init [project-name]创建一个名为 [project-name] 的新目录,并将其初始化为 Git 仓库。
git clone [url]克隆一个远程仓库到本地,并自动将其命名为 origin
git clone [url] [new-name]克隆一个远程仓库到本地,并自定义本地仓库的目录名。
git config --global user.name "[name]"设置全局提交者姓名,所有本地仓库都会使用这个配置。
git config --global user.email "[email address]"设置全局提交者邮箱,所有本地仓库都会使用这个配置。
git config --local user.name "[name]"仅为当前仓库设置提交者姓名。
git config --list显示所有 Git 配置信息(包括全局和本地)。
git config -l --show-origin显示所有 Git 配置信息及其来源文件。

日常工作流程 (Staging & Committing)

命令描述
git status显示工作区和暂存区的状态,查看哪些文件被修改、暂存或未被跟踪。
git status -sgit status --short以简短的格式显示状态。
git add [file]将指定文件的更改添加到暂存区。
git add .将当前目录下所有更改(新增、修改、删除)添加到暂存区。
git add -u将所有已跟踪文件的修改和删除操作添加到暂存区,但不包括新文件。
git add -p进入交互模式,逐块选择要暂存的更改。
git commit -m "[message]"将暂存区的内容提交到本地仓库,并附上提交信息。
git commit -am "[message]"将所有已跟踪文件的更改先添加到暂存区,然后一次性提交。相当于 git add -u && git commit -m
git commit --amend修改最后一次的提交。可以修改提交信息,或将新的暂存更改合并到上一次提交中。

分支管理 (Branching & Merging)

命令描述
git branch列出所有本地分支,当前分支会用 * 标记。
git branch -r列出所有远程分支。
git branch -a列出所有本地和远程分支。
git branch [branch-name]创建一个新分支,但不会切换过去。
git checkout [branch-name]切换到指定分支,并更新工作区。
git checkout -b [branch-name]创建一个新分支,并立即切换到该分支。
git checkout -b [branch-name] [remote-name]/[remote-branch-name]基于远程分支创建一个新的本地分支,并切换过去。
git merge [branch-name][branch-name] 分支的历史合并到当前分支。这会创建一个新的合并提交。
git merge --no-ff [branch-name]使用“非快进”(Non-Fast-Forward)模式合并,即使可以快进也会创建一个新的合并提交,以保留分支历史。
git merge --squash [branch-name][branch-name] 上的所有提交合并成一个单一的提交放在当前分支,但不会自动提交。
git branch -d [branch-name]删除一个已经完全合并到当前分支的分支。
git branch -D [branch-name]强制删除一个分支,即使它还没有被合并。
git branch -m [old-name] [new-name]重命名一个本地分支。

变基 (Rebasing)

变基是合并分支的另一种方式,它可以使提交历史更整洁。

命令描述
git rebase [base-branch]将当前分支的提交“变基”到 [base-branch] 之上,即把当前分支的提交在 [base-branch] 的最新提交之后重放一遍。
git rebase -i [commit-hash]git rebase -i HEAD~N进入交互式变基模式,可以对最近的 N 个提交进行编辑、合并、拆分或重新排序。
git rebase --continue在解决完变基冲突后,继续执行变基操作。
git rebase --abort取消当前的变基操作,回到变基之前的状态。
git rebase --skip跳过当前导致冲突的提交,继续变基。

远程协作 (Remotes & Syncing)

命令描述
git remote -v显示所有配置的远程仓库及其 URL。
git remote add [name] [url]添加一个新的远程仓库,并为其指定一个名称(通常是 origin)。
git remote remove [name]删除一个远程仓库的配置。
git remote rename [old-name] [new-name]重命名一个远程仓库。
git fetch [remote]从远程仓库下载最新的对象和引用,但不会自动合并到你的本地分支。
git fetch --prune在下载前,删除远程仓库中已经不存在的远程跟踪分支。
git pull [remote] [branch]从远程仓库拉取最新的变动,并尝试合并到当前分支(相当于 git fetch + git merge)。
git pull --rebase使用变基的方式来合并远程更改,而不是创建合并提交。
git push [remote] [branch]将本地分支的提交推送到指定的远程仓库分支。
git push -u [remote] [branch]首次推送一个新分支时使用,它会设置本地分支跟踪对应的远程分支。
git push [remote] --delete [branch]删除一个远程分支。
git push [remote] --force强制推送,会覆盖远程仓库的历史。慎用!
git push [remote] --force-with-lease更安全的强制推送,如果远程分支在你上次拉取后有新的提交,则会推送失败。

检查历史与撤销操作 (Inspection & Undoing)

命令描述
git log显示从最新到最旧的提交历史。
git log --oneline以简洁的单行格式显示提交历史。
git log --graph以图形化的方式显示分支合并历史。
git log --stat显示每次提交的文件变更统计。
git log -p显示每次提交的详细差异。
git log --author="[name]"查找特定作者的提交。
git log --grep="[pattern]"在提交信息中搜索匹配特定模式的提交。
git show [commit-hash]显示某次提交的详细信息和变更内容。
git diff显示工作区和暂存区之间的差异。
git diff --stagedgit diff --cached显示暂存区和上次提交之间的差异。
git diff [branch1]..[branch2]显示两个分支之间的差异。
git reset [file]将文件从暂存区移出,但保留工作区的修改。
git reset [commit-hash](mixed 模式) 撤销到指定的提交,保留工作区的修改,但将这些修改移出暂存区。
git reset --soft [commit-hash](soft 模式) 撤销到指定的提交,保留工作区的修改,并将这些修改保留在暂存区。
git reset --hard [commit-hash](hard 模式) 彻底回退到指定的提交,丢弃之后的所有提交以及工作区和暂存区的所有更改。慎用!
git revert [commit-hash]创建一个新的提交,内容与指定提交相反,用于“撤销”某次提交,是一种更安全的回退方式。
git checkout -- [file]丢弃工作区中对指定文件的修改,恢复到上次提交时的状态。
git clean -fd删除所有未被跟踪的文件和目录。慎用! -n 选项可以预览将要删除的内容。

储藏 (Stashing)

当你需要临时切换分支,但又不想提交当前不完整的代码时,可以使用储藏功能。

命令描述
git stash将当前工作区的修改(已跟踪文件)和暂存区的修改储藏起来,让工作区变干净。
git stash save "[message]"储藏并附带一条描述信息。
git stash list列出所有储藏的记录。
git stash apply应用最近一次的储藏,但不会从储藏列表中删除它。
git stash pop应用最近一次的储藏,并从储藏列表中删除它。
git stash drop stash@{n}删除指定的储藏。
git stash clear删除所有储藏。

高级命令 (Advanced Commands)

命令描述
git tag [tag-name]在当前提交上创建一个轻量标签。
git tag -a [tag-name] -m "[message]"创建一个带附注的标签,包含作者、日期和信息。推荐使用此方法。
git tag列出所有标签。
git push [remote] [tag-name]将指定标签推送到远程仓库。
git push [remote] --tags将所有本地标签一次性推送到远程仓库。
git reflog显示 HEAD 的移动历史记录,包括被删除的提交和分支切换。是恢复误操作的强大工具。
git cherry-pick [commit-hash]将指定的提交应用到当前分支,生成一个新的提交。
git bisect start启动二分查找,用于快速定位引入 bug 的提交。
git bisect good [commit] / git bisect bad [commit]在二分查找过程中标记“好”的提交和“坏”的提交。
git bisect reset结束二分查找。
git submodule add [repository-url] [path]将一个 Git 仓库作为子模块添加到你的项目中。
git blame [file]逐行显示指定文件的每一行是由谁在哪次提交中最后修改的。

Released under the MIT License.