Git常用命令Cheat Sheet的说明描述
这是一个关于常用git
命令的CheatSheet
,里面包含了git log
, git add
, git pull
, git status
, git rm
, git fetch
, git push
, git am
, git bisect
, git branch
, git checkout
, git cherry-pick
, git switch
, git commit
, git rebase
等命令的解释用法。
Cheat Sheet
命令 | 解释 |
---|---|
git add | 添加文件(暂存区) |
git add --all | 添加全部文件(暂存区和非暂存区) |
git add --patch | 交互式选择添加文件 |
git add --update | 只添加暂存区已更改的文件 |
git add --verbose | 添加文件打印记录 |
git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign --message "--wip-- [skip ci]" | 添加所有文件-移除已标记为删除的文件-提交(跳过预提交和提交消息的钩子) |
git am | 从邮箱中应用补丁文件 |
git am --abort | 恢复当前分支并中止修补操作 |
git am --continue | 修补失败后继续操作 |
git am --show-current-patch | 显示修补失败的消息 |
git am --skip | 跳过当前的修补 |
git apply | 应用补丁文件(*.patch),但不创建提交 |
git apply --3way | 应用补丁文件,尝试三方合并 |
git bisect | 使用二分查找来找到引入错误的提交 |
git bisect bad | 标记当前会话为坏版本 |
git bisect good | 标记当前会话为好版本 |
git bisect new | 标记当前会话为新版本, 不能再同一个会话中混用bad ,good , new , old |
git bisect old | 标记当前会话为旧版本 |
git bisect reset | 清除二分状态并返回到原始HEAD |
git bisect start | 启用二分会话 |
git blame -w | 显示文件每一行的最后修改版本和作者 |
git branch | 列出本地分支 |
git branch --all | 列出本地和远程分支 |
git branch --delete | 删除完全合并的分支 |
git branch --delete --force | 强制删除完全合并的分支 |
LANG=C git branch --no-color -vv \|grep ": gone\]" \|awk '"'"'{print $1}'"'"' \|xargs git branch -d | 删除已合并的分支(分支名包含: gone) |
LANG=C git branch --no-color -vv \|grep ": gone\]" \|awk '"'"'{print $1}'"'"' \|xargs git branch -D | 删除分支(分支名包含: gone) |
git branch --move | 移动重命名分支 |
git branch --no-merged | 显示未合并的分支 |
git branch --remote | 显示远程分支 |
git branch --set-upstream-to=origin/$(git_current_branch) | 设置当前分支的上游分支 |
LANG=C git branch -vv \|grep ": gone\]" | 显示分支名包含: gone的分支 |
git checkout | 切换分支或恢复文件 |
git checkout --recurse-submodules | 切换分支更新所有子模块 |
git checkout -b | 新建分支 |
git checkout $(git_develop_branch) | 切换当前变量git_develop_branch 的分支 |
git checkout $(git_main_branch) | 切换当前变量git_main_branch 的分支 |
git cherry-pick | 将一个或多个提交应用到当前分支 |
git cherry-pick --abort | 取消操作并返回到预排序状态 |
git cherry-pick --continue | 使用.git/sequencer 中的信息继续进行中的操作。可以用来在解决cherry-pick 或abort 失败的冲突后继续执行 |
git clean --interactive -d | 交互式清理未跟踪的文件 |
git clone --recurse-submodules | 克隆仓库及子模块 |
git clone --recurse-submodules "$@" && cd "$(basename $\_ .git)" | |
git commit --all --message | 指定消息提交所有暂存区文件到本地仓库(不包括未跟踪的文件) |
git commit --all --signoff | 提交所有暂存区文件到本地仓库为这次提交加签署(不包括未跟踪的文件) |
git commit --all --signoff --message | 指定消息提交所有暂存区文件到本地仓库为这次提交加签署(不包括未跟踪的文件) |
git commit --message | 指定消息提交暂存区文件到本地仓库 |
git commit --signoff --message | 指定消息提交暂存区文件到本地仓库为这次提交加签署 |
git commit --verbose | 提交并展示详细信息 |
git commit --verbose --all | 提交全部已修改的文件并展示详细信息 |
git commit --verbose --all --amend | 将暂存区的全部了已修改内容合并到该提交中,并且可以修改提交信息。 |
git commit --verbose --all --no-edit --amend | 将暂存区的全部已修改内容合并到该提交中,并且保持提交信息不变,不需要编辑器来修改提交信息 |
git commit --verbose --all --signoff --no-edit --amend | 将暂存区的全部已修改内容合并到该提交中,并在提交信息的结尾添加一个 “Signed-off-by” 行,同时保持提交信息不变,不需要编辑器来修改提交信息 |
git commit --verbose --amend | 将暂存区的修改内容合并到该提交中,并且允许编辑提交信息。 |
git commit --verbose --no-edit --amend | 将暂存区的修改内容合并到该提交中,不需要编辑提交信息。 |
git commit -S | 提交时使用 GPG 签名,以确保提交的可信度和完整性 |
git commit -S -s | 进行 GPG 签名的同时,在提交信息末尾添加一个 “Signed-off-by” 行 |
git commit -S -s -m | 进行 GPG 签名的同时,在提交信息末尾添加一个 “Signed-off-by” 行同时使用-m的消息 |
git config --list | 列出当前Git配置的所有设置 |
git describe --tags $(git rev-list --tags --max-count=1) | 显示最新的标签描述 |
git diff | 显示已更改文件的比较 |
git diff --cached | 显示已暂存文件与最后一次提交的比较 |
git diff --cached --word-diff | 显示已暂存的更改,并以单词为单位以更详细的方式展示这些更改 |
git diff --staged | 显示已暂存文件与最后一次提交的比较 |
git diff --word-diff | 比较文件的差异,并以单词为单位显示更改 |
git diff -w "$@" \|view - | 显示文件的差异,忽略空白字符的变化,并将输出通过view文本查看器显示出来 |
git diff @{upstream} | 当前分支与其上游分支之间的差异 |
git diff $@ ":(exclude)package-lock.json" ":(exclude)\*.lock" | 显示文件的变更,但排除了名为 package-lock.json 的文件以及所有 .lock 扩展名结尾的文件 |
git diff-tree --no-commit-id --name-only -r | 列出提交中所有更改的文件列表 |
git fetch | 从远程仓库获取最新变更, 但并不会合并这些变更到你的本地工作目录 |
git fetch --all --prune | 从所有远程仓库获取最新的变更,并且清理本地不存在的远程分支引用,使本地分支列表保持与远程分支一致 |
git fetch origin | 从远程仓库 origin 中获取最新的变更,但不会自动合并这些变更到你的本地分支 |
git gui citool | 启动Git图形用户界面中的提交工具(citool) |
git gui citool --amend | Git GUI中以交互方式修改最新的提交 |
git help | 查看帮助文档 |
git log --graph | 图形化显示提交历史 |
git log --graph --decorate --all | 图形化方式展示所有分支的提交历史,并且显示每个提交所属的分支或标签信息 |
git log --graph --max-count=10 | 图形化方式显示最近的十个提交记录。 |
git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' | 图形化方式展示提交历史,并且按照指定的格式显示每个提交的信息,包括提交哈希(红色)、分支、提交信息、提交日期以及作者信息 |
git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short | 图形化方式展示提交历史,并且按照指定的格式显示每个提交的信息,包括提交哈希(红色)、分支、提交信息、提交日期(短时间y-m-d)以及作者信息 |
git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' | 图形化方式展示提交历史,并以自定义的格式显示每个提交的信息,包括提交哈希、分支、提交信息、相对提交时间(比如2天前)以及作者信息 |
git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --all | 图形化方式展示所有分支的提交历史,并且按照自定义格式显示每个提交的信息,包括提交哈希、分支、提交信息、相对提交时间以及作者信息 |
git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --stat | 图形化方式展示提交历史,并显示每个提交的变更统计信息,让你了解每个提交都修改了哪些文件以及文件中发生了多少行的变更 |
git log --oneline --decorate | 以简洁的方式显示提交历史,每个提交只占据一行,并且显示提交哈希以及提交信息,同时标记每个提交所属的分支或者是否有标签引用 |
git log --oneline --decorate --graph | 以简洁的方式显示提交历史,并以图形化的方式展示提交历史中的分支合并情况和分支关系。每个提交只占据一行,包括提交哈希和提交信息摘要,并标记每个提交所属的分支或者是否有标签引用 |
git log --oneline --decorate --graph --all | 以简洁的方式显示所有分支的提交历史,并以图形化的方式展示提交历史中的分支合并情况和分支关系。每个提交只占据一行,包括提交哈希和提交信息摘要,并标记每个提交所属的分支或者是否有标签引用 |
git log --pretty=<format> | 以自定义格式显示提交的简略信息:format可以是%H,%an,%ae,%s,%cd等 |
git log --stat | 显示每个提交的摘要信息,并列出每个提交中修改了哪些文件以及每个文件发生了多少行的变更 |
git log --stat --patch | 列出每个提交的摘要信息、变更统计和详细的变更内容,以帮助你了解每个提交具体修改了哪些内容 |
git ls-files -v \|grep "^[[:lower:]]" | 列出未被Git跟踪或暂存的文件 |
git ls-files \|grep | 匹配指定模式的文件 |
git merge | 将一个分支的更改合并到另一个分支中 |
git merge --abort | 取消正在进行中的合并操作的命令 |
git merge --squash | 合并分支但不自动提交合并结果的选项 |
git merge origin/$(git_main_branch) | 将主分支合并到当前分支 |
git merge upstream/$(git_main_branch) | 将上游主分支合并到当前分支 |
git mergetool --no-prompt | 解决合并冲突时启动合并工具,自动解决冲突 |
git mergetool --no-prompt --tool=vimdiff | 以 Vimdiff 的方式打开合并冲突的文件,自动尝试解决冲突 |
git pull | 从远程仓库获取最新的数据,并自动尝试将这些更新合并到你的当前分支中 |
git pull --rebase | 将你当前分支的提交暂存起来,然后将远程分支的提交应用在你的分支上。这个操作类似于把你的提交放到远程分支的最新提交之后。相对于常规的合并(merge),变基可以产生一个更干净、线性的提交历史 |
git pull --rebase -v | 同git pull --rebase 作用,会显示详细信息 |
git pull --rebase --autostash | 如果你有未暂存的更改,Git 将会自动保存这些更改,执行变基操作,然后再应用之前保存的更改。这样做可以让你在变基之前和之后保留工作目录的更改,让你无需手动处理暂存区或者工作目录的内容 |
git pull --rebase --autostash -v | 同git pull --rebase --autostash -v 作用,会显示详细信息 |
git pull --rebase origin $(git_main_branch) | 从远程仓库的指定分支(通常是主分支)拉取更新并执行变基操作,将这些更新应用到当前分支上 |
git pull --rebase=interactive origin $(git_main_branch) | Git 会以交互式的方式将远程分支的更新应用到当前分支上,并让你有机会对每个提交进行调整、编辑或者跳过,以便更灵活地控制变基的过程 |
git pull origin "$(git_current_branch)" | 从远程仓库拉取更新到当前本地分支,并尝试自动合并这些更新 |
git pull origin $(current_branch) | 从远程仓库(通常是 origin)拉取与当前本地分支同名的远程分支的更新,并尝试将这些更新合并到当前本地分支中 |
git pull upstream $(git_current_branch) | 远程仓库上游git_current_branch分支拉取更新,并尝试将这些更新合并到当前本地分支中。 |
git pull upstream $(git_main_branch) | 远程仓库上游git_main_branch分支拉取更新,并尝试将这些更新合并到当前本地分支中。 |
git push | 本地的提交推送到远程仓库 |
git push --dry-run | 模拟推送操作的命令,并不会真正的推送 |
git push --force | 强制推送本地更改到远程仓库 |
git push --force origin $(current_branch) | 强制推送当前本地分支到远程同名分支 |
git push --force-with-lease | 强制推送本地更改到远程仓库,但会确保在强制推送时,不会覆盖其他人已经推送到远程仓库的更改 |
git push --force-with-lease origin $(current_branch) | 强制推送当前本地分支到远程同名分支,但会确保在强制推送时,不会覆盖其他人已经推送到远程仓库的更改 |
git push --set-upstream origin $(git_current_branch) | 设置远程仓库的默认分支,通常是在第一次推送本地新建的分支到远程仓库时使用 |
git push --set-upstream origin $(git_current_branch) --force-with-lease | 将当前的本地分支推送到远程仓库的同名分支,并设置为默认的上游分支。使用 --force-with-lease 选项是为了确保在强制推送时,不会覆盖其他人已经推送到远程的更改。 |
git push --verbose | 同git push 作用`,会显示详细信息 |
git push origin --all && git push origin --tags | 推送所有本地分支以及标签到名为 origin 的远程仓库。 |
git push origin --delete | 命令用于删除远程仓库(origin)中的指定分支。 |
git push origin "$(git_current_branch)" | 当前本地分支推送到名为 origin 的远程仓库的git_current_branch分支。 |
git push origin $(current_branch) | 当前本地分支推送到名为 origin 的远程仓库的current_branch分支。 |
git push upstream | 推送到上游分支比如 git push upstream xxx-branch |
git rebase | 将一系列提交应用于另一个分支上。它将当前分支的提交移动到另一个分支上,并且可以通过变基操作对提交进行重排、合并或删除 |
git rebase --abort | 取消正在进行中的变基操作 |
git rebase --continue | 用于在解决完冲突后继续执行变基操作的命令 |
git rebase --interactive | 启动一个交互式的变基过程,允许你对提交历史进行交互式的重新排序、编辑提交信息或合并提交等操作 |
git rebase --onto | 将一段提交历史移动到另一个分支或提交上的命令: git rebase --onto <new_base> <old_base> |
git rebase --skip | 放弃当前提交并继续变基过程 |
git rebase $(git_develop_branch) | 将当前分支变基到git_develop_branch 分支上 |
git rebase $(git_main_branch) | 将当前分支变基到git_main_branch 分支上 |
git rebase origin/$(git_main_branch) | 将当前分支变基到origin/git_main_branch 分支上 |
git remote | 列出当前配置的远程仓库的名称 |
git remote --verbose | 列出当前配置的远程仓库的名称和详细信息 |
git remote add | 添加一个新的远程仓库 |
git remote remove | 移除已存在的远程仓库 |
git remote rename | 重命名已存在的远程仓库 |
git remote set-url | 修改远程仓库的 URL |
git remote update | 更新本地仓库的远程跟踪分支 |
git reset | 撤销更改或移动 HEAD 和当前分支的引用位置 |
git reset -- | 列出能撤销的文件列表 |
git reset --hard | 丢弃工作目录、暂存区的更改,强制将 HEAD 移动到指定的提交处 |
git reset --keep | 保留工作目录和暂存区的更改,只是将 HEAD 移动到指定的提交处 |
git reset --soft | 只是将HEAD移动到指定的提交处 |
git reset --hard && git clean -dffx | 重置到最干净的状态,并删除所有未被Git管理的文件 |
git reset origin/$(git_current_branch) --hard | 将当前分支重置为与远程分支一致的状态 |
git restore | 丢弃工作区中的更改或恢复文件到之前的状态 |
git restore --source | 恢复指定文件到指定提交时的状态,而不改变暂存区和工作区 |
git restore --staged | 取消暂存指定文件,将其移出暂存区,但保留在工作区中的更改 |
git rev-list --max-count=1 --format="%s" HEAD \|grep -q "--wip--" && git reset HEAD~1 | 撤销提交信息中包含--wip-- 字样的提交, 将 HEAD 指针移动到上一次提交的位置,但保留工作目录和暂存区中的更改 |
git revert | 撤销某次提交的更改,并创建一个新的提交来反转这次提交的影响,而不改变提交历史 |
git rm | 从 Git 的暂存区和工作目录中移除文件 |
git rm --cached | 从 Git 的暂存区中移除文件,但保留工作目录中的实际文件的命令 |
git shortlog --summary -n | 按照提交者的顺序列出每个提交者的提交数量 |
git show | 显示某个对象(提交、标签等)的详细信息,包括提交的元数据和更改内容 |
git show --pretty=short --show-signature | 简短格式显示指定提交的信息,并展示签名信息 |
git stash --all | 将所有未跟踪的文件、已暂存的文件和工作目录中已跟踪的文件都储藏起来 |
git stash --include-untracked | 更改暂时保存起来,使得工作区变得干净,可以在以后恢复这些更改 |
git stash apply | 将最近的储藏(stash)中的更改应用到当前分支,但并不会删除这个储藏 |
git stash clear | 移除所有的储藏(stash),它会永久性地删除所有暂存的更改,并清空储藏堆栈 |
git stash drop | 删除最近的储藏(stash)中的更改 |
git stash list | 显示当前存储在储藏堆栈中的所有储藏 |
git stash pop | 将最近的储藏(stash)中的更改应用到当前分支,并从储藏堆栈中移除这个储藏 |
git stash push | 将当前工作目录中的更改暂存到一个新的储藏。通常情况下,push 是git stash 的默认操作 |
git stash save | 将工作目录中的更改创建一个新的储藏,保存暂存区和工作区的所有更改,包括已暂存的和未暂存的更改 |
git stash show --patch | 显示最新储藏(stash)中的更改,并以 patch(补丁) 的格式展示这些更改 |
git status | 当前工作目录的状态,显示关于工作区和暂存区的更改信息 |
git status --short | 显示简短格式的状态信息 |
git status --short -b | 显示简短格式的状态信息附加分支名 |
git submodule init | 初始化一个项目中包含的子模块 |
git submodule update | 更新子模块内容,确保子模块中包含的代码和版本与其所在的仓库一致 |
git svn dcommit | 将本地Git 分支的更改推送到Subversion 服务器中对应的SVN 分支 |
git svn dcommit && git push github $(git_main_branch):svntrunk | 推送到SVN 分支再推送到github 的svntrunk分支 |
git svn rebase | 从SVN 服务器拉取最新的提交,然后尝试将这些提交合并到当前所在的Git 分支上 |
git switch | 切换分支 |
git switch -c | 创建一个新分支并切换过去 |
git switch $(git_develop_branch) | 切换到git_develop_branch 分支 |
git switch $(git_main_branch) | 切换到git_main_branch 分支 |
git tag --annotate | 创建带有注释的标签 |
git tag -s | 创建一个带有 GPG 签名的签名标签 |
git tag \|sort -V | 标签按版本号排序 |
git update-index --assume-unchanged | 忽略指定文件的本地更改 |
git update-index --no-assume-unchanged | 取消对文件的’假定未更改’标记 |
git whatchanged -p --abbrev-commit --pretty=medium | 命令已经被废弃, 推荐使用git log |
git worktree | 管理多个工作目录,每个工作目录都可以指向同一个或不同的分支 |
git worktree list | 列出所有的工作目录 |
git worktree move | 移动一个工作目录 |
git worktree remove | 移除一个工作目录 |
gitk --all --branches &! | 图形界面中打开 Gitk 工具,并显示所有分支的提交历史。 |
gitk --all $(git log --walk-reflogs --pretty=%h) &! | 使用Gitk工具并显示所有引用日志的提交历史 |
相关文档
文中有错误或者想添加新的命令,你可以在下方留言告诉我。