全干工程师

git-command

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-pickabort失败的冲突后继续执行
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 --amendGit 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 -vgit pull --rebase作用,会显示详细信息
git pull --rebase --autostash如果你有未暂存的更改,Git 将会自动保存这些更改,执行变基操作,然后再应用之前保存的更改。这样做可以让你在变基之前和之后保留工作目录的更改,让你无需手动处理暂存区或者工作目录的内容
git pull --rebase --autostash -vgit 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 --verbosegit 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将当前工作目录中的更改暂存到一个新的储藏。通常情况下,pushgit 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 rebaseSVN服务器拉取最新的提交,然后尝试将这些提交合并到当前所在的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工具并显示所有引用日志的提交历史

相关文档

  1. https://git-scm.com/docs

文中有错误或者想添加新的命令,你可以在下方留言告诉我。

留言