文章目录
git add
添加到暂存区
gitadd.# 添加当前目录下的所有文件到暂存区 gitadd dir/ # 添加指定目录下的所有文件到暂存区 gitadd file1 file2 # 只添加指定的文件到暂存区
相关
git reset HEAD -- .# 撤销暂存区的所有改动,但不会影响工作目录gitdiff--cached# 显示暂存区与上一次提交(本地仓库)之间的差异
git blame
可以追溯一个指定文件的历史修改记录
git blame <文件名># 显示一个文件的逐行历史修改记录,包括作者和修改时间git blame -L69,82<文件名># 显示文件第69--82行最近一次的修改记录git blame --line-porcelain <文件名># 显示文件修改历史,不包含文件名和行号git blame --show-email <文件名># 显示文件的修改历史,只显示行号和作者
git branch
用于列出、创建或删除分支
git branch # 列出本地所有分支git branch <分支名># 创建一个新的分支git branch -d<分支名># 删除指定的分支git branch -m<旧分支名><新分支名># 重命名一个分支git branch -r# 列出远程所有分支git branch -a# 列出本地和远程所有分支git branch -v# 列出本地所有分支并显示最后一次提交git branch -vv# 列出本地所有的分支并显示最后一次提交和对应的远程分支
git checkout
用于切换分支或恢复工作目录的文件,它是git最常用的命令之一,同时也是一个很危险的命令,因为这条命令会重写工作区。
git checkout <分支名># 切换到指定的分支git checkout -b<新分支名># 创建并切换到一个新的分支,相当于 git branch <分支名> 再 git checkout <分支名>git checkout <提交ID># 恢复到指定的提交git checkout <文件名># 恢复指定文件到暂存区或最后一次提交状态git checkout -- <文件名># 丢弃工作目录中对指定文件的修改git checkout <分支名> -- <文件名># 从指定分支恢复文件到当前分支git checkout -b<分支名> origin/<分支名># 克隆完远程分支后,默认只有master分支,此命令切换到远程分支 git checkout <提交ID> -- <文件名># 恢复某一文件。如果在暂存区有就从暂存区恢复,否则从版本库恢复。
git cherry-pick
用于将一个或多个提交的更改应用到当前分支
git cherry-pick <提交ID># 将指定的提交应用到当前分支git cherry-pick <提交ID1><提交ID2># 将多个指定的提交依次应用到当前分支git cherry-pick <提交ID1>..<提交ID2># 将一段范围内的提交应用到当前分支git cherry-pick --continue# 解决冲突后继续应用提交git cherry-pick --abort# 取消当前的cherry-pick操作git cherry-pick --quit# 退出当前的cherry-pick操作但保留已经应用的提交
git clone
用于从远程仓库克隆一个完整的仓库到本地
git clone <仓库地址># 克隆远程仓库到本地git clone <仓库地址><目录># 克隆远程仓库到指定的本地目录git clone -b<分支名><仓库地址># 克隆指定分支的远程仓库git clone --depth<深度><仓库地址># 进行浅克隆,只获取指定深度的提交记录git clone --single-branch <仓库地址># 只克隆指定分支,而不获取其他分支git clone --recurse-submodules <仓库地址># 克隆远程仓库并初始化、更新所有子模块
git commit
用于提交暂存区的更改到本地仓库
git commit # 把暂存区中的文件提交到本地仓库,调用文本编辑器输入提交信息git commit -m"<提交信息>"# 提交暂存区的更改并添加提交信息git commit -a-m"<提交信息>"# 跳过暂存区,直接提交所有已修改的文件并添加提交信息git commit --amend-m"<新提交信息>"# 修改上一次提交的信息或包括新的更改git commit --amend --no-edit # 修改上一次提交,不改变提交信息git commit -v# 提交时显示所有差异git commit --squash<提交ID># 将当前更改与指定提交合并为一个提交git commit --fixup<提交ID># 创建一个修复指定提交的提交
从本地仓库撤销到暂存区:
git reset --soft HEAD^
git config
用于配置Git的设置,例如用户信息、编辑器等
git config --global user.name "<用户名>"# 设置全局用户名git config --global user.email "<邮箱地址>"# 设置全局用户邮箱git config --global core.editor "<编辑器>"# 设置全局默认编辑器git config --list# 列出所有当前配置git config <key># 获取指定配置项的值git config --global alias.<别名>"<命令>"# 创建全局别名git config --system--list# 列出系统范围内的配置
git diff
查看差异
gitdiff# 显示工作目录中所有文件的尚未暂存的改动gitdiff<文件名># 显示指定文件的尚未暂存的改动gitdiff--cached# 显示已暂存到索引但尚未提交的改动gitdiff--stat# 以统计方式显示改动,列出哪些文件被修改以及修改的行数gitdiff HEAD # 显示工作目录和最新提交之间的所有改动gitdiff HEAD^ # 显示工作目录和上一个提交之间的改动gitdiff HEAD~5 # 显示工作目录和前五次提交之前的改动gitdiff<提交ID># 显示工作目录和指定提交之间的改动gitdiff<分支名># 显示当前分支与指定分支之间的差异gitdiff<分支名称><分支名称># 显示两个指定分支之间的差异gitdiff<分支名称>...<分支名称># 显示两个分支的共同祖先以来的差异gitdiff origin/dev dev # 显示远程分支origin/dev和本地分支dev之间的差异
git fetch
用于从远程仓库获取最新的更新,但不会自动合并这些更新
git fetch # 从默认的远程仓库(通常是 origin)获取所有分支的更新git fetch <远程仓库名># 从指定的远程仓库获取更新git fetch <远程仓库名><分支名># 从指定的远程仓库获取指定分支的更新git fetch --all# 从所有配置的远程仓库获取更新git fetch --prune# 获取更新时删除远程仓库中已删除的分支git fetch origin # 从远程仓库 origin 获取更新git fetch origin master # 从远程仓库 origin 获取 master 分支的更新git fetch origin +refs/heads/*:refs/remotes/origin/* # 强制更新所有远程分支到本地
git init
用于初始化一个新的 Git 仓库
git init # 在当前目录初始化一个新的 Git 仓库git init <目录名># 在指定目录下初始化一个新的 Git 仓库git init --bare# 初始化一个裸仓库,不包含工作目录,通常用于远程仓库git init --template=<模板目录># 使用指定的模板目录初始化一个新的 Git 仓库git init --separate-git-dir=<git目录># 将 Git 仓库的元数据存储在指定目录中,而不是默认的 .git 目录
git log
用于查看仓库的提交历史记录
git log # 显示所有提交的历史记录git log -n5# 显示最近的 5 次提交git log --oneline# 简洁地显示提交历史,每个提交一行git log --graph# 以图形方式显示提交历史git log --stat# 显示每次提交的文件修改统计git log --author="作者名"# 只显示指定作者的提交git log --since="2023-01-01"# 显示自指定日期以来的提交git log --until="2023-06-14"# 显示截至指定日期的提交git log --grep="关键字"# 只显示提交信息中包含指定关键字的提交git log <分支名># 显示指定分支的提交历史git log develop -n3# 显示 develop 分支最近的 3 次提交git log origin/develop -n3# 显示远程仓库 origin 的 develop 分支最近的 3 次提交git log <提交ID># 从指定提交开始显示提交历史
git ls-files
用于显示当前工作区中被 Git 跟踪的文件列表
git ls-files # 显示当前工作区中所有被 Git 跟踪的文件git ls-files -o# 显示当前工作区中未被 Git 跟踪的文件git ls-files -i# 显示当前工作区中被忽略的文件git ls-files -m# 显示当前工作区中被修改但未提交的文件git ls-files -s# 显示文件的状态信息,包括文件模式、对象名和文件名git ls-files --stage# 显示文件的索引信息git ls-files -d# 显示已被删除但尚未提交的文件
git merge
用于合并不同分支的内容
git merge <分支名># 将指定分支合并到当前分支git merge --no-ff <分支名># 禁用快速合并,确保创建一个新的合并提交git merge --squash<分支名># 将指定分支的所有提交压缩为一个提交git merge --abort# 取消当前的合并过程并恢复到合并前的状态git merge --no-commit <分支名># 合并指定分支但不自动提交git merge --strategy=recursive -X theirs <分支名># 使用指定策略合并,并在冲突时优先选择指定分支的内容git merge --strategy=recursive -X ours <分支名># 使用指定策略合并,并在冲突时优先选择当前分支的内容
git mv
用于移动或重命名被 Git 跟踪的文件或目录
gitmv<旧文件路径><新文件路径># 将文件从旧路径移动到新路径gitmv<旧目录路径><新目录路径># 将目录从旧路径移动到新路径gitmv-f<旧文件路径><新文件路径># 强制移动文件,即使目标路径已存在文件gitmv<旧文件路径1><旧文件路径2><新目录路径># 将多个文件移动到新目录
git push
用于将本地分支的提交推送到远程仓库
git push <远程仓库名><分支名># 将指定分支推送到远程仓库git push origin main # 将本地主分支推送到名为 origin 的远程仓库git push --all# 推送所有本地分支到远程仓库git push --tags# 推送所有本地标签到远程仓库git push -u origin main # 推送本地主分支到远程仓库并设置跟踪git push --force# 强制推送,即使会覆盖远程仓库的历史记录git push origin :<分支名># 删除远程仓库中的指定分支git push <远程主机名><本地分支名>:<远程分支名># 将本地分支推送到远程分支,可以用于重命名远程分支git push origin HEAD:<分支名># 将当前分支推送到远程的新分支git push --set-upstream origin <分支名># 将本地分支推送到远程分支,并设置本地分支与远程分支的跟踪关系
git pull
用于从远程仓库获取最新的更改并合并到当前分支。 首先会执行 git fetch,然后执行 git merge,把获取的分支的 HEAD 合并到当前分支。
git pull <远程仓库名><分支名># 从指定的远程仓库和分支拉取更新并合并到当前分支git pull origin main # 从名为 origin 的远程仓库的主分支拉取更新并合并到当前分支git pull --rebase# 拉取更新并在本地提交之上重新应用(rebase)远程提交git pull --ff-only # 仅执行快速合并(fast-forward),如果不能快速合并则终止git pull --no-commit # 拉取更新但不自动提交合并结果git pull --squash# 拉取更新并将所有更改压缩为一个提交
git reflog
用于查看本地仓库的引用日志,记录了所有分支和 HEAD 的移动历史
git-reflog是用来恢复本地错误操作很重要的一个命令
git reflog # 显示所有引用的日志记录git reflog show <分支名># 显示指定分支的引用日志git reflog show HEAD@{2}# 显示 HEAD 在两次前的状态git reflog expire --expire=now --all# 清除所有引用日志git reflog delete --rewrite<分支名>@{n}# 删除指定引用日志条目
git remote
用于管理远程仓库的链接
git remote # 列出所有远程仓库git remote -v# 显示所有远程仓库的详细信息,包括 fetch 和 push 的 URLgit remote add<远程仓库名><仓库URL># 添加一个新的远程仓库git remote remove <远程仓库名># 删除一个远程仓库git remote rename<旧远程仓库名><新远程仓库名># 重命名一个远程仓库git remote set-url <远程仓库名><新URL># 修改远程仓库的 URL 地址
git reset
用于重置当前分支的 HEAD 到指定状态,可以更改暂存区和工作目录
语法:
git reset [--soft | --mixed | --hard] [HEAD]
git reset --soft<提交ID># 重置到指定提交,但保留暂存区和工作目录的更改git reset --soft HEAD^ # 本地仓库撤回到暂存区,相当于调用 "git reset <commit ID>" 命令后又做了一次 "git add"git reset --mixed<提交ID># 重置到指定提交,保留工作目录的更改,但清空暂存区(默认方式)git reset --hard<提交ID># 重置到指定提交,清空暂存区和工作目录的所有更改git reset HEAD~1 # 重置到上一个提交,保留工作目录的更改,但清空暂存区git reset <文件名># 从暂存区中移除指定文件的更改,但保留工作目录的更改,相当于撤销git add,可以指定文件也可以不指定
git restore
用于恢复工作目录或暂存区的文件
git restore <文件名># 恢复工作目录中的指定文件到最近一次提交的状态git restore --staged<文件名># 从暂存区中移除指定文件的更改,但保留工作目录的更改git restore --source=<提交ID><文件名># 恢复指定提交中的文件到工作目录git restore --worktree<文件名># 恢复工作目录中的指定文件(默认行为)git restore --staged--worktree<文件名># 同时恢复暂存区和工作目录中的指定文件
git revert
生成一个新的提交来撤销某次提交,此次提交之前的所有提交都会被保留
git revert <提交ID># 创建一个新的提交,撤销指定的提交git revert -n<提交ID># 创建一个新的提交,撤销指定的提交,但不自动提交更改git revert --no-edit <提交ID># 创建一个新的提交,撤销指定的提交,并跳过提交信息编辑git revert HEAD # 撤销最近的一次提交git revert HEAD~2..HEAD # 撤销最近的两次提交
git rm
用于从暂存区和工作目录中删除文件
gitrm<文件名># 从暂存区和工作目录中删除指定文件gitrm--cached<文件名># 仅从暂存区中删除指定文件,但保留工作目录中的文件gitrm-r<目录名># 递归删除指定目录及其内容gitrm-f<文件名># 强制删除已修改或已暂存的文件gitrm-n<文件名># 显示将要删除的文件,但不实际删除
git shortlog
用于生成提交历史的简短摘要,按作者分组
git shortlog # 显示所有提交的简短摘要,按作者分组git shortlog -s# 只显示每个作者的提交数量git shortlog -n# 按提交数量排序作者git shortlog -e# 显示每个作者的电子邮件地址git shortlog v1.0..HEAD # 显示从标签v1.0到当前HEAD的提交摘要
git show
用于显示各种类型的对象(如提交、标签等)的详细信息
git show <对象># 显示指定对象的详细信息,通常是提交git show # 显示最近一次提交的详细信息git show <提交ID># 显示指定提交的详细信息git show <提交ID>:<文件名># 显示指定提交中某个文件的内容git show --name-only <提交ID># 显示指定提交的文件修改列表,不包括具体内容git show --raw<提交ID># 显示指定提交的详细信息,包括文件修改的原始差异信息git show --stat<提交ID># 显示指定提交的统计信息(文件修改数量、插入和删除行数)git show --pretty=short <提交ID># 以简短格式显示指定提交的日志信息
git status
用于显示工作目录和暂存区的状态。
git status # 显示工作目录和暂存区的状态信息git status -s# 以简短格式显示状态信息git status --short# 同上,简短格式显示状态信息git status -b# 显示当前分支信息以及与上游分支的差异git status --branch# 同上,显示当前分支信息git status --ignored# 显示被忽略的文件git status --untracked-files=all # 显示所有未跟踪的文件git status --untracked-files=no # 不显示未跟踪的文件git status --untracked-files=normal # 默认选项,显示未跟踪的文件
git stash
用于临时保存当前工作目录的修改,以便在以后恢复
git stash # 保存当前工作目录的修改到栈中git stash save "描述信息"# 保存当前工作目录的修改,并添加描述信息git stash list # 显示所有保存的修改列表git stash apply # 恢复最近一次保存的修改,但不删除该保存git stash apply stash@{2}# 恢复指定的保存(例如第二个保存),但不删除该保存git stash pop # 恢复最近一次保存的修改,并删除该保存git stash drop # 删除最近一次保存的修改git stash drop stash@{2}# 删除指定的保存(例如第二个保存)git stash clear# 清空所有保存的修改git stash show # 显示最近一次保存的修改内容git stash show stash@{2}# 显示指定保存的修改内容git stash branch <分支名># 在新分支上应用最近一次保存的修改
git switch
用于切换分支或创建新分支
git switch <分支名># 切换到指定的分支git switch -c<新分支名># 创建并切换到新分支git switch -C<新分支名># 强制创建并切换到新分支,如果分支已存在则覆盖git switch - # 切换到上一个分支git switch --detach<提交ID># 切换到指定的提交,不关联任何分支
git tag
用于给提交打标签,通常用于标记版本
git tag # 列出所有标签git tag <标签名># 给当前最新提交打一个标签git tag -a<标签名>-m"标签信息"# 创建带有信息的注释标签git tag -d<标签名># 删除指定的标签git tag -l"v1.0.*"# 列出符合特定模式的标签,例如所有以v1.0.开头的标签git tag <标签名><提交ID># 给指定的提交打标签git show <标签名># 显示指定标签的详细信息git push origin <标签名># 推送指定标签到远程仓库git push origin --tags# 推送所有标签到远程仓库git push origin :refs/tags/<标签名># 删除远程仓库中的指定标签git checkout <标签名称># 切换到指定的标签git show <标签名称># 查看标签的信息
git whatchanged
用于显示提交历史及其引入的文件变化
git whatchanged # 显示提交历史及其引入的文件变化git whatchanged -p# 以补丁格式显示提交历史及其引入的文件变化git whatchanged --since="2 weeks ago"# 显示两周以来的提交历史及其引入的文件变化git whatchanged --until="2023-01-01"# 显示指定日期之前的提交历史及其引入的文件变化git whatchanged -n5# 显示最近的5次提交历史及其引入的文件变化git whatchanged <路径># 显示指定路径的提交历史及其引入的文件变化
版权归原作者 张华华a 所有, 如有侵权,请联系我们删除。