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'
git config --global user.email '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 config -–add site.name hello
git config [--local | --global | --system] –unset site.name
git config --global alias.别名 命令

git help 显示有关Git的帮助信息

git --help
git help config/git config --help/git --help config
git help git/git --help git
git help help/git --help help

git init 初始化

  • git init 创建一个空的Git仓库或重新初始化一个现有仓库

git add 将文件内容添加到暂存区

git add <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
git clone --recursive git@github.com:rbind/yihui.git

git status 查看状态

git status
git status -uno

git diff 显示提交和工作树等之间的更改

git diff
git diff <file>
git diff --cached/git diff --staged/
git diff HEAD
git diff HEAD^ HEAD
git diff HEAD -- ./lib
git diff commitID1 commitID2
git diff topic
git diff topic dev /git diff topic..dev
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^
git reset --hard commit_id
git reset --hard HEAD~3
git reset --hard ORIG_HEAD
git reset --merge ORIG_HEAD
git reset --soft
git reset --keep start

git rm 从工作区和暂存区中删除文件

git rm test.txt
git rm -r mydir
git rm --cache test.txt
git rm -f

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
git branch -a
git branch -r
git branch -m test test1
git branch -d test
git branch -D test
git branch --set-upstream dev origin/test

Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。

git checkout 切换分支或恢复工作树文件

git checkout dev
git checkout -b hello
git checkout -B hello
git checkout [commitID]
git checkout --detach hello
git checkout --orphan <branch>
git checkout --merge <branch>
git checkout -p <branch>
git checkout <tagName>

git merge 将两个或两个以上的开发历史加入(合并)一起

  • git merge hello 合并hello分支到当前分支

Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。这种合并看不出来曾经做过合并。

git merge hello1 hello2
git merge --abort
git merge --continue
git merge -s ours obsolete
git merge --no-ff -m "merge with no-ff" dev

git mergetool 运行合并冲突解决工具来解决合并冲突

  • git mergetool git设置 mergetool 可视化工具。可以设置BeyondCompare,DiffMerge等作为git的比较和合并的可视化工具,方便操作。

git log 显示提交日志信息

git log
git log --no-merges
git log dev home
git log --graph
git log -3
git log --author=csf
git log --after={2019-03-01}/git log --since={2019-03-01}
git log --until={2019-03-01}/git log --before={2019-03-01}
git log --until={2019-03-07} --after={2019-03-05}
git log commitID
*git log commitID1 commitID2
*git log commitID1..commitID2
git log HEAD^
git log HEAD~2 HEAD~2
git log --pretty=oneline
git log --pretty=oneline --abbrev-commit
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 stash -u
git stash -a/git stash --all
git stash list
git stash apply
git stash apply stash@{2}
git stash apply --index
git stash drop stash@{0}
git stash pop
git stash show/git stash show stash@{0}
git stash show -p/git stash show -p stash@{0}
git stash clear
git stash branch testNew

如果你储藏了一些工作,暂时不去理会,然后继续在你储藏工作的分支上工作,你在重新应用工作时可能会碰到一些问题。如果尝试应用的变更是针对一个你那之后修改过的文件,你会碰到一个归并冲突并且必须去化解它。如果你想用更方便的方法来重新检验你储藏的变更,你可以运行 git stash branch,这会创建一个新的分支,检出你储藏工作时的所处的提交,重新应用你的工作,如果成功,将会丢弃储藏。这是一个很棒的捷径来恢复储藏的工作然后在新的分支上继续当时的工作。

git tag 创建,列出,删除或验证使用GPG签名的标签对象

为什么有commit还要有tag?因为每次记commitID很复杂,直接找commit对应的有意义的tag,就很好找了。

git tag/git tag -l/git tag -l <tagName>
git tag <name>
git tag <name> <commitID>
git tag <name>-light
git tag -a <name> -m "message"
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 branch1:branch2
首先执行上面的fetch操作,使用远程branch1分支在本地创建branch2(但不会切换到该分支),如果本地不存在branch2分支, 则会自动创建一个新的branch2分支,如果本地存在branch2分支, 并且是`fast forward’, 则自动合并两个分支, 否则, 会阻止以上操作.

git fetch origin :branch2

等价于: git fetch origin master:branch2

git pull 从另一个存储库或本地分支获取并集成(整合)

取回远程主机某个分支的更新,再与本地的指定分支合并,它的完整格式稍稍有点复杂。

git pull <远程主机名>
git pull <远程主机名><远程分支名>
git pull <远程主机名><远程分支名>:<本地分支名>
git pull --rebase <远程主机名><远程分支名>:<本地分支名>
*git pull -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
git push --force origin/git push -f origin
git push -f origin dev:student
git push -u 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
git submodule add <版本库的网址> <本地目录名>
git submodule update --init --recursive
git submodule update --recursive --remote
git submodule
git submodule update
git submodule update --remote
git submodule init

git show 用于显示各种类型的对象

  • git show tagName 看到说明文字

git shortlog 汇总git日志输出

git shortlog
git shortlog -s
git shortlog -n
git shortlog -sn/git shortlog -s -n
git shortlog -2

git describe 显示离当前提交最近的标签

该命令查找从提交可访问的最新标记。如果标签指向提交,则只显示标签。

否则,它将标记 名称与标记对象之上的其他提交数量 以及 最近提交的缩写对象名称后缀

  • git describe 如果最新一次提交没有注释标签,那么会显示

fatal: No annotated tags can describe ‘daa38004d76012c77029727096b9e4ef724030a7’.

  • 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 rebase --skip
git rebase --abort

git reflog GIT操作历史记录

一般用于维护和数据恢复。当你在一个仓库下工作时,你的每一步操作都会记录下来,包括checkout,rebase,merge,commit操作。所以这个也是一个很好的回滚方式。

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

git reflog dev
git reflog --date=local | grep merge1

  • git reflog delete HEAD@{1} 删除对应步骤的git操作历史记录

git cherry-pick 摘樱桃模式

  • git cherry-pick commitID 可以选择某个分支的一个或几个commit合并到另一个分支上。

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

SegmentFault博客
我还没有学会写个人说明!
上一篇

CabloyJS也有工作流引擎了,是你想要的吗?

下一篇

想拍出大片效果?你需要的只是给肥皂泡打束激光

你也可能喜欢

评论已经被关闭。

插入图片