乐趣区

关于前端:GIT实操手册-值得收藏的GIT常用命令字典

目录

  • git config 配置
  • git help 显示无关 Git 的帮忙信息
  • git init 初始化
  • git add 将文件内容增加到暂存区
  • git clone 将存储库克隆到新目录中
  • git status 查看状态
  • git diff 显示提交和工作树等之间的更改
  • git commit 提交
  • git reset 将以后 HEAD 复位到指定状态,用于吊销之前的一些操作
  • git rm 从工作区和暂存区中删除文件
  • git mv 挪动或重命名文件,目录或符号链接
  • git branch 列出,创立或删除分支
  • git checkout 切换分支或复原工作树文件
  • git merge 将两个或两个以上的开发历史退出 (合并) 一起
  • git mergetool 运行合并抵触解决工具来解决合并抵触
  • git log 显示提交日志信息
  • git stash 将更改储备在脏工作目录中
  • git tag 创立,列出,删除或验证应用 GPG 签名的标签对象
  • git remote 治理近程主机
  • git fetch 从另一个存储库下载对象和援用
  • git pull 从另一个存储库或本地分支获取并集成(整合)
  • git push 将本地分支的更新,推送到近程主机
  • git submodule 初始化,更新或查看子模块
  • git show 用于显示各种类型的对象
  • git shortlog 汇总 git 日志输入
  • git describe 显示离以后提交最近的标签
  • git rebase 合并分支
  • git reflog GIT 操作历史记录
  • git cherry-pick 摘樱桃模式

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> 把 path 中的文件或者目录增加到暂存区
  • git add ./git add */git add -A 把所有的批改都增加到暂存区中
  • git add -u <path>
  • 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 <file> 比拟某文件和暂存区文件差别
  • 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 <path> 将暂存区里的指定文件复原到工作树中
  • 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 <source> <destination> 例如: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 <branch>
  • git checkout --merge <branch>
  • git checkout -p <branch>
  • git checkout <tagName> 切换到 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 <tagName> 查看所有标签、查看指定标签
  • git tag <name> 以后分支的最新 HEAD 打新标签
  • git tag <name> <commitID> 给对应的某个 commitID 打标签
  • git tag <name>-light 创立轻量标签
  • git tag -a <name> -m "message" 创立带有阐明的标签,即正文标签,用 - a 指定标签名,- m 指定阐明文字
  • git tag -d <name> 删除本地标签
  • 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 <tagName> 推送某个标签到近程分支
  • git push origin --tags 一次性推送全副尚未推送到近程的本地标签
  • git push origin :<tagname> / git push origin :refs/tags/<tagname> 删除一个近程标签

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

  • 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

退出移动版