git常用命令字典

git config 配置 git config –global user.name ‘hello’ 设置全局用户名 hello git config –global user.email ‘hello@zuoyebang.com’ 设置全局邮箱hello@zuoyebang.com git config user.name 查看配置中的配置项(用户名) git config user.email 查看配置中的配置项(邮箱) git config –global core.editor emacs 配置默认的文本编辑器 git config –global merge.tool vimdiff 配置比较工具用来解决冲突 git config –list 列出 Git 可以在该处找到的所有的设置 git config -–add site.name hello 默认是添加在 local 配置中的新配置项 git config [–local | –global | –system] –unset site.name 删除配置项中的 site.name 配置值 git config –global alias.别名 命令 给命令设置别名,例如给 git status 设置别名为 s,git config –global alias.s status

#git help 显示有关 Git 的帮助信息 git –help 在 git 窗口查看命令 git help config/git config –help/git –help config 查看 git config 如何使用 git help git/git –help git 显示 git 手册页 git help help/git –help help 查看 help 命令如何使用 #git init 初始化 git init 创建一个空的 Git 仓库或重新初始化一个现有仓库 #git add 将文件内容添加到暂存区 git add 把 path 中的文件或者目录添加到暂存区 git add ./git add */git add -A 把所有的修改都添加到暂存区中 git add -u git add -i #git clone 将存储库克隆到新目录中 git clone <版本库的网址> git clone <版本库的网址> <本地目录名> git clone –bare git clone -l git clone -s git clone -n git clone –reference git clone -o jQuery https://github.com/jquery/jquery.git 克隆远程主机到本地,并将远程主机重命名为 jQuery,默认是 origin git clone –recursive git@github.com:rbind/yihui.git 克隆库的时候要初始化子模块,加 –recursive 参数 #git status 查看状态 git status 显示工作目录和暂存区的状态 git status -uno #git diff 显示提交和工作树等之间的更改 git diff 是查看 working tree 与暂存区文件的差异 git diff 比较某文件和暂存区文件差异 git diff –cached/git diff –staged/ 比较暂存区和上次 commit 的 HEAD 的差异 git diff HEAD 显示工作版本(Working tree)和上次 commit 的 HEAD 的差异 git diff HEAD^ HEAD 比较上次提交和上上次提交的差异 git diff HEAD – ./lib 显示当前目录下的 lib 目录和上次提交之间的差别(更准确的说是在当前分支下) git diff commitID1 commitID2 比较两个历史版本之间的差异 git diff topic 比较当前分支与 topic 分支的差别 git diff topic dev /git diff topic..dev 在 dev 和 topic 两个分支之间比较变更 git diff –stat 仅仅比较统计信息(简单结果) #git commit 提交 git commit 将暂存区中的文件、描述、更改用户、日志消息一起提交到存储库 git commit -a/git commit –all 将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过 git add 添加到暂存区,新加的文件(即没有被 git 系统管理的文件)是不能被提交到本地仓库的。(建议一般不要使用-a 参数) git commit -m ‘message’ /git commit –message ‘message’ 简要说明提交的信息 git commit –amend 追加提交,它可以在不增加一个新的 commit-id 的情况下将新修改的代码追加到前一次的 commit-id 中 git commit -v 查看要提交的内容与版本库中的比较,然后进行提交 #git reset 将当前 HEAD 复位到指定状态,用于撤消之前的一些操作 git reset 将暂存区里的所有文件恢复到工作树中 git reset 将暂存区里的指定文件恢复到工作树中 git reset – README.md 将暂存区的单独一个文件恢复到工作树中。 git reset –soft HEAD^ commit 之后取消本地提交,回到没有提交之前的暂存区中。 git reset –hard commit_id git reset –hard HEAD~3 永久删除最后几个提交 git reset –hard ORIG_HEAD 执行 git pull 完后,发现这次拉取下来的修改不满意,想要回滚到 git pull 之前的状态,并清空本地没有加入暂存区的内容。 git reset –merge ORIG_HEAD 执行 git pull 完后,发现这次拉取下来的修改不满意,想要回滚到 git pull 之前的状态,可以避免在回滚时清除工作区,保留暂存区和工作树的内容。 git reset –soft git reset –keep start #git rm 从工作区和暂存区中删除文件 git rm test.txt 删除 test.txt 文件,并把它从 git 仓库管理系统中删除,需要执行 git commit 才能真正提交到 git 仓库 git rm -r mydir 删除 mydir 文件夹,并把它从 git 的仓库管理系统中删除 git rm –cache test.txt 从暂存区中移除 test.txt 文件,对文件本身不进行改变。 git rm -f 取消 rm 操作 #git mv 移动或重命名文件,目录或符号链接 git mv 例如:git mv test.txt mydir 将 test.txt 文件移动到 mydir 目录下 git mv test.txt test1.txt 将 test.txt 文件重命名为 test1.txt 此操作必须要在暂存区或者文件 commit 之后才能进行 rename,此时不需要再 git add, 否则会报错 fatal: not under version control, source=home/test.txt, destination=home/test1.txt )

git mv -f git mv -k #git branch 列出,创建或删除分支 git branch 查看本地分支和当前分支 git branch test 新建 test 分支(还在当前分支中) git branch -a 查看本地分支和远程分支 git branch -r 查看远程分支 git branch -m test test1 修改本地分支名称 git branch -d test 删除本地分支 git branch -D test 强制删除本地 test 分支,有时候-d 的时候回提示没有完全合并 git branch –set-upstream dev origin/test 将本地 dev 分支与远程主机的 test 分支建立追踪关系 Git 会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在 git clone 的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的 master 分支自动"追踪"origin/master 分支。

#git checkout 切换分支或恢复工作树文件 git checkout dev 切换新分支(没有 commit 的文件会跟随新分支切换) git checkout -b hello 创建并切换到新分支 hello git checkout -B hello 强制创建并切换到新分支,如果当前目录有这个分支,进行覆盖操作 git checkout [commitID] 切换到某一个提交版本的分支 git checkout –detach hello 切换到 hello 分支的最后一次提交的 commitID 版本的分支 git checkout –orphan git checkout –merge git checkout -p git checkout 切换到 tagName 标签的分支中 #git merge 将两个或两个以上的开发历史加入(合并)一起 git merge hello 合并 hello 分支到当前分支 Fast-forward 信息,Git 告诉我们,这次合并是“快进模式”,也就是直接把 master 指向 dev 的当前提交,所以合并速度非常快。这种合并看不出来曾经做过合并。

git merge hello1 hello2 合并 hello1 和 hello2 分支的东西到当前分支,多个分支合并。 git merge –abort 放弃合并 git merge –continue 合并继续,这个命令后是修改合并生成的 commit 信息 git merge -s ours obsolete git merge –no-ff -m “merge with no-ff” dev 普通模式合并,合并后历史上有分支,能看出来曾经做过合并,表示禁用 Fast forward,准备合并 dev 分支,因为要创建一个新的 commit,所以加上-m 参数,把 commit 的表述写进去 #git mergetool 运行合并冲突解决工具来解决合并冲突 git mergetool git 设置 mergetool 可视化工具。可以设置 BeyondCompare,DiffMerge 等作为 git 的比较和合并的可视化工具,方便操作。 #git log 显示提交日志信息 git log 显示提交日志信息 git log –no-merges 显示整个提交历史记录,但跳过合并记录 git log dev home 显示 home 子目录中的任何文件的所有提交 git log –graph 可以看到分支合并图 git log -3 查看最近三次提交 git log –author=csf 查看 csf 作者的提交记录 git log –after={2019-03-01}/git log –since={2019-03-01} 查看 2018-03-01 日之后的提交记录,包括当前日期 git log –until={2019-03-01}/git log –before={2019-03-01} 查看 2018-03-01 日之前的提交记录,不包括当前日期 git log –until={2019-03-07} –after={2019-03-05} 查看 2018-03-05 到 2018-03-06 两天的提交记录 git log commitID 查看包含 commitID 之前的历史记录 *git log commitID1 commitID2 查询 commit1 与 commit2 之间的记录,包括 commit1 和 commit2 *git log commitID1..commitID2 查询 commit1 与 commit2 之间的记录,不包括 commit1 git log HEAD^ HEAD 代表最后一次提交,HEAD^为最后一个提交的父提交,等同于 HEAD ~ 1 git log HEAD~2 HEAD ~ 2 代表倒数第二次提交 git log –pretty=oneline 按指定格式显示日志信息(显示一行,可选项有:oneline,short,medium,full,fuller,email,raw 以及 format:,默认为 medium) git log –pretty=oneline –abbrev-commit 按指定格式显示日志信息,显示一行,commitID 使用 7 位数 git log –pretty=format:"%an %ae %ad %cn %ce %cd %cr %s" –graph 自定义格式图文形式输出 选项说明 %H —— 提交对象(commit)的完整哈希字串 %h —— 提交对象的简短哈希字串 %T —— 树对象(tree)的完整哈希字串 %t —— 树对象的简短哈希字串 %P —— 父对象(parent)的完整哈希字串 %p —— 父对象的简短哈希字串 %an —— 作者(author)的名字 %ae —— 作者的电子邮件地址 %ad —— 作者修订日期(可以用 -date= 选项定制格式) %ar —— 作者修订日期,按多久以前的方式显示 %cn —— 提交者(committer)的名字 %ce —— 提交者的电子邮件地址 %cd —— 提交日期 %cr —— 提交日期,按多久以前的方式显示 %s —— 提交说明

#git stash 将更改储藏在脏工作目录中 git stash/git stash save 将更改储藏在脏工作目录中(只是会将 git 跟踪的文件(unstaged changes)和暂存区中的文件(staged changes)进行修改) git stash -u 将更改储藏在脏工作目录中(git 跟踪的文件(unstaged changes)、暂存区中的文件(staged changes)、工作目录中的新文件(untracked files)) git stash -a/git stash –all 将当前目录的所有文件都进行储藏(git 跟踪的文件(unstaged changes)、暂存区中的文件(staged changes)、工作目录中的新文件(untracked files)、被忽略的文件(ignored files)) git stash list 查看现有的储藏 git stash apply 应用最新一次储藏的内容,不删除赃工作目录 git stash apply stash@{2} 应用指定储藏版本的内容 git stash apply –index git stash drop stash@{0} 删除指定储藏版本的内容,之后的名称 1 会变成从 0 开始 git stash pop 应用最新一次储藏版本的内容,并将其从堆栈中移走,此时运行 git stash list 将没有这个储藏的记录 git stash show/git stash show stash@{0} 查看最新一个 stash 的 diff 统计信息 git stash show -p/git stash show -p stash@{0} 查看最新一个 stash 的展开 diff git stash clear 删除所有缓存的 stash git stash branch testNew 从 stash 创建分支,如果成功,将会丢弃储藏。 如果你储藏了一些工作,暂时不去理会,然后继续在你储藏工作的分支上工作,你在重新应用工作时可能会碰到一些问题。如果尝试应用的变更是针对一个你那之后修改过的文件,你会碰到一个归并冲突并且必须去化解它。如果你想用更方便的方法来重新检验你储藏的变更,你可以运行 git stash branch,这会创建一个新的分支,检出你储藏工作时的所处的提交,重新应用你的工作,如果成功,将会丢弃储藏。这是一个很棒的捷径来恢复储藏的工作然后在新的分支上继续当时的工作。

#git tag 创建,列出,删除或验证使用 GPG 签名的标签对象 为什么有 commit 还要有 tag?因为每次记 commitID 很复杂,直接找 commit 对应的有意义的 tag,就很好找了。

git tag/git tag -l/git tag -l 查看所有标签、查看指定标签 git tag 当前分支的最新 HEAD 打新标签 git tag 给对应的某个 commitID 打标签 git tag -light 创建轻量标签 git tag -a -m “message” 创建带有说明的标签,即注释标签,用-a 指定标签名,-m 指定说明文字 git tag -d 删除本地标签 git tag start ? #git remote 管理远程主机 git remote 列出所有远程主机 git remote -v 查看远程主机的网址 git remote show <主机名> 查看主机的详细信息 git remote add <主机名> <网址> 添加远程主机 git remote rm <主机名> 删除远程主机 git remote rename <原主机名> <新主机名> 重命名远程主机 #git fetch 从另一个存储库下载对象和引用 通常是将远程主机的版本库有了新的 commit 的时候,将这些更新取回本地,这个命令通常用来查看其他人的进程,因为它取回的代码对本地的开发代码没有影响。 可以使用 git merge 和 git rebase 命令,在本地分支合并远程分支。 这个命令主要是在合并之前可以看看有哪些地方进行了修改

git fetch <远程主机名> 将远程主机的更新全部取回本地,默认是所有分支的更新 git fetch <远程主机名><分支名> 取回远程主机中的特定分支的更新(git fetch origin dev) *git fetch origin branch1:branch2 首先执行上面的 fetch 操作,使用远程 branch1 分支在本地创建 branch2(但不会切换到该分支),如果本地不存在 branch2 分支, 则会自动创建一个新的 branch2 分支,如果本地存在 branch2 分支, 并且是`fast forward’, 则自动合并两个分支, 否则, 会阻止以上操作.

git fetch origin :branch2 等价于: git fetch origin master:branch2

#git pull 从另一个存储库或本地分支获取并集成(整合) 取回远程主机某个分支的更新,再与本地的指定分支合并,它的完整格式稍稍有点复杂。 默认模式下,git pull 是 git fetch 和 git merge FETCH_HEAD 的缩写

git pull <远程主机名> 将远程主机的全部分支取回并与本地分支合并,如果当前分支和远程分支有追踪关系,git pull 就可以省略远程分支名。

git pull <远程主机名><远程分支名> 将远程主机的某一个分支取回和本地当前分支合并

git pull <远程主机名><远程分支名>:<本地分支名> 将远程的某一分支取回和本地某一分支进行合并(git pull dev:test)

git pull –rebase <远程主机名><远程分支名>:<本地分支名> 将远程某一分支取回和本地某个分支进行 rebase 合并,不写默认是 merge

*git pull -p 如果远程主机删除了某个分支,就会在本地删除远程已经删除的分支 (等同 git fetch –prune origin → git fetch -p)

#git push 将本地分支的更新,推送到远程主机 git push 如果远程主机和当先分支有追踪关系,那么主机名可以忽略,默认是将所有的分支都取回 git push <远程主机名><远程分支名>:<本地分支名> 将本地某一分支推送到远程主机的某一分支上 git push origin 如果远程主机和当先分支有追踪关系,将本地当前分支推送到 origin 远程主机的对应分支 git push origin test 将本地的当前分支推送到远程主机的 test 分支,如果 test 分支不存在,则会被新建 git push origin test:test1 将本地的 test 分支推送到 origin 远程主机的 test1 分支上

git push <远程主机名> –delete <远程分支名> / git push <远程主机名> :<远程分支名> 删除远程某一分支(第二种相当于推送一个空的本地分支到远程分支,也是删除远程分支的) git push origin –delete test /git push origin :test 删除远程 test 分支

git push –all origin 将所有本地分支都推送到 origin 远程主机(当远程主机的版本 bii 本地版本更新的时候,推送时 git 会报错,要求先在本地做 git pull 合并差异) git push –force origin/git push -f origin 将本地分支强推送到 origin 远程主机,结果导致在远程主机产生一个”非直进式”的合并(non-fast-forward merge)。除非你很确定要这样做,否则应该尽量避免使用–-force 选项。 git push -f origin dev:student 将本地的 dev 分支强覆盖 origin 远程主机的远程 student 分支 git push -u origin master 如果当前分支与多个主机存在追踪关系,使用-u 指定一个默认主机,这样就可以不加任何参数的使用 git push(这个是指定了 origin 主机的 master 为默认选项) git push origin 推送某个标签到远程分支 git push origin –tags 一次性推送全部尚未推送到远程的本地标签 git push origin : / git push origin :refs/tags/ 删除一个远程标签 #git submodule 初始化,更新或检查子模块 git submodule add http://github.com/chaconinc/DbConnector 添加一个名为 “DbConnector” 的库。默认情况下,子模块会将子项目放到一个与仓库同名的目录中,如果你想要放到其他地方,看下面。 git submodule add <版本库的网址> <本地目录名> 把某版本库添加到本地的某个目录中。 git submodule update –init –recursive 已经克隆了主库但没初始化子模块 git submodule update –recursive –remote 已经克隆并初始化子模块,而需要从子模块的源更新这个子模块.更新之后主库的,git 差异中会显示新的 SHA 码,把这个差异选中提交即可。 git submodule 查看子模块 git submodule update 更新项目内子模块到最新版本 git submodule update –remote 更新子模块为远程项目的最新版本 git submodule init 初始化子模块 #git show 用于显示各种类型的对象 git show tagName 看到说明文字 #git shortlog 汇总 git 日志输出 git shortlog 汇总每个人的 commit 记录,进行简单输出 git shortlog -s 参数省略每次 commit 的注释,仅仅返回一个简单的统计。 git shortlog -n 参数按照 commit 数量从多到少的顺利对用户进行排序 git shortlog -sn/git shortlog -s -n 按照 commit 的数量从多到少进行排序,并简单的统计数量。 git shortlog -2 查看最近两次的 commit 记录 #git describe 显示离当前提交最近的标签 该命令查找从提交可访问的最新标记。如果标签指向提交,则只显示标签。 否则,它将标记 名称与标记对象之上的其他提交数量 以及 最近提交的缩写对象名称后缀。

git describe 如果最新一次提交没有注释标签,那么会显示 fatal: No annotated tags can describe ‘daa38004d76012c77029727096b9e4ef724030a7’. However, there were unannotated tags: try –tags.

git describe –tags 显示离当前提交最近的标签,不限于只是注释标签, 如果 tag 之后没有提交,就只显示名字,如果之后有提交,就显示下面的

merge1this-1-g84a2cd7 说明:

“最新一次 tagName” — “打 tagName 以来有两次提交 commit” — “最新一个 g+commitID” ,g 表示 git 如果之后没有提交,后面两个参数不会写。

git describe –all git describe –contains git describe –always #git rebase 合并分支 这部分的内容,可以参考之前的文章 包你学会 git rebase(opens new window)

git rebase 将合并分支合并到当前分支,并将当前分支的代码合并到后面,获取干净整洁的班版本树 git rebase –continue git 遇到冲突会停下要求解决冲突,冲突解决完之后会继续应用(apply)余下的补丁 git rebase –skip 跳过当前合并的冲突,进入下一个提交的 diff git rebase –abort 任何时候都可以用这个命令终止 rebase 操作,分支会回到 rebase 开始的状态 #git reflog GIT 操作历史记录 一般用于维护和数据恢复。当你在一个仓库下工作时,你的每一步操作都会记录下来,包括 checkout,rebase,merge,commit 操作。所以这个也是一个很好的回滚方式。

git reflog / git reflog show 显示所有的 git 操作历史记录

git reflog dev 显示在 dev 分支上面的操作历史记录 git reset –hard git@{1} 回滚到那个位置

git reflog –date=local | grep merge1 根据本地时间查看 merge1 分支的 git 操作记录

git reflog delete HEAD@{1} 删除对应步骤的 git 操作历史记录 #git cherry-pick 摘樱桃模式 git cherry-pick commitID 可以选择某个分支的一个或几个 commit 合并到另一个分支上。 假设有一个稳定版本,现在要升级版本,如果将两个版本的分支合并,那么会造成版本混乱,不利于维护,一般会将要增加的功能单独提交一个分支,然后增加到新版本上,就可以使用 cherry-pick 了。

记住 cherry-pick 是一个本地操作。假如你在 pull 代码之后有人又提交了代码,那么需要先 pull 代码,再进行 cherry-pick

Licensed under CC BY-NC-SA 4.0
最后更新于 Jan 06, 2025 05:52 UTC
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计
Caret Up