博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Git学习笔记12——命令总结
阅读量:3942 次
发布时间:2019-05-24

本文共 10006 字,大约阅读时间需要 33 分钟。

日常使用命令

在这里插入图片描述

workspace:工作区index/stage:暂存区repository:本地仓库remote:远程仓库

在交互式操作中常用命令:

  • p,pick = use commit
  • r,reword = use commit,but edit the commit message
  • e,edit = use commit,but stop for amending
  • s,squash = use commit,but meld into previous commit
  • f,fixup = like “squash”,but discard this commit’s log message
  • x,exec = run command(the rest of the line)using shell
  • d,drop = remove commit

新建版本库

# 在本地初始化一个 Git 仓库(repository),即把当前所在目录变成 Git 可以管理的仓库。$ git init
# 在本地新建一个目录,将其初始化为Git仓库。$ git init [project-name]
# 从远程库(origin)克隆一个仓库到本地,仓库名同远程仓库名.$ git clone [url]

添加、提交文件

# 把文件添加到暂存区(stage),可被 track 追踪纪录下来。可多次使用来添加多个文件。$ git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录。$ git add [dir]
# 暂存新增加的和修改的文件,不包括已删除的文件。即当前目录下所有文件。$ git add .
# 强制添加被 .gitignore 忽略的文件到 Git。$ git add -f [file]
# 一次性把暂存区所有文件修改提交到仓库的当前分支。# 注意:提交信息可为中文也可为英文,若为英文则通常用一般现在时。# 如果不加参数 -m 则会跳转到编辑器强制填写提交说明信息。$ git commit -m "本次提交说明"
# 跳过暂存区,直接提交工作目录中所有改变的文件,但是不能提交工作目录中新增的文件$ git commit -a -m "提交消息"
# 提交暂存区的文件,并重写提交作者$ git commit --author=lavor -m "提交消息"
# 提交暂存区的文件,并重写提交日期$ git commit --date=06.13.2016T09:00:00 -m "提交消息"
# 通过创建一个新的提交,以替换当前分支的前端。# 所代表的含义就是在最新一次提交的基础上进行提交。# 比如我们完成了最新一次提交,并且这次提交完成后我们对工作目录进行了一些修改,# 但是我们发现某个文件忘了添加到暂存区并提交,# 我们可以先添加该文件到暂存区,然后利用该命令进行提交。$ git commit --amend -m "提交消息"
# 为文件重命名$ git mv oldfile newfile
# 移动文件到指定目录$ git mv files dir
# 强制为文件重命名,即使目标文件已存在$ git mv -f oldfile newfile
# 强制移动文件到指定目录名,即使目标文件已存在$ git mv -f files dir

查看状态、修改

# 显示当前仓库的最新状态。# 提交之后,工作区就是“干净的”,即没有新的修改;# 有未提交文件时,最上面显示的是在 staging area,即将被 commit 的文件;# 中间显示没有 stage 的修改了的文件,# 最下面是新的还没有被 Git track 的文件。# Untracked files:未被跟踪的文件,表示是工作目录新增加的文件;# Changes not staged for commit:工作目录中修改了文件,但是没有被添加到暂存区;# Changes to be committed:添加到暂存区的文件,等待提交。$ git status
# 查看工作目录与暂存区的差异。$ git diff
# 查看指定文件具体修改了哪些内容。$ git diff [file]
# 查看暂存区与指定提交(默认是HEAD)的差异。$ git diff --cached [
]
# 查看暂存区中的修改。$ git diff --staged 或 git diff --cached
# 查看工作目录与指定提交的差异。$ git diff 
# 查看两次指定提交的差异。$ git diff [commit id1] [commit id2]
# 查看工作目录与指定分支的差异。$ git diff [branch]
# 查看两个指定分支间的差异。$ git diff [branch1] [branch2]
# 查看版本库最新版本和工作区之间的区别。$ git diff HEAD -- [file]
# 显示最近 times 次(默认是一次)提交的所有对象信息。$ git show [-times]

查看日志

# 显示从最近到最远的提交日志,# 包括每个提交的SHA-1校验和、作者的名字和电子邮件地址、提交时间以及提交说明等基本信息。$ git log
# 查看所有提交记录。$ git log --all
# 查看提交记录,以 oneline 形式显示,只显示一行,# 显示的内容是提交hash的前7位与提交消息。$ git log --oneline
# 表示查看最近 times 次提交改变的内容。$ git log -p -times:
# 查看最近 times 次(默认是所有)提交记录,并显示文件的差异分析。$ git log -stat [-times]
# 查看分支合并图。$ git log --graph
# 简化日志信息,将每个提交放在一行显示,# 查看的提交数很大时非常有用,# 也可带有--graph 参数,效果同git config format.pretty oneline。$ git log --pretty=oneline
# 查看分支的合并情况,包括分支合并图、一行显示、提交校验码缩略显示。$ git log --graph --pretty=oneline --abbrev-commit
# 显示总提交次数与每次提交的提交消息。$ git shortlog

版本回退

# 将暂存区的所有文件重置到当前分支的HEAD$ git reset
# 将暂存区的指定文件重置到指定的 
, #
既可以是commit的hash(或者hash前7位)也可以是 HEAD 及其祖先,# HEAD~1 表示 HEAD 的父亲,是 HEAD 的前一次提交,# 没有
时默认是 HEAD。$ git reset
files
# 将当前的分支重设到指定的 
,并且根据mode有可能更新暂存区和工作目录。# mode 的取值可以是 hard、soft、mixed、merged、keep。# hard :重置暂存区与工作目录到指定提交,删除
之后的所有提交并将 HEAD 指向该提交,此操作危险指数较大(应慎用)# soft :暂存区与工作目录不会变化,仅仅删除
之后的所有提交并将 HEAD 指向该提交# mixed :默认的,重置暂存区到指定提交,删除
之后的所有提交并将 HEAD 指向该提交# merge与keep用的比较少$ git reset [--hard|soft|mixed|merge|keep] [
]
# 回退到上一个版本。# 同理,回退到上上个版本为:HEAD^^, # 回退到上100个版本为:HEAD-100,波浪号 ~ 也可以,变成倒数第101个。$ git reset --hard HEAD^
# 回退到某一提交过的版本,如果已经 push,则回退的意义不大了。# 版本号没必要写全,前几位就可以了,Git会自动去找。# 当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。$ git reset --hard [commit id]
# 显示所有提交,下拉,推送,与切换分支操作。# 显示当前分支的最近几次提交。它记录每一次命令,可用于查找某一提交版本的 commit id。$ git reflog
# 显示所有提交,下拉,推送操作。$ git reflog --all

撤销修改

# 丢弃工作区的修改,包括修改后还没有放到暂存区和添加到暂存区后又作了修改两种情况。# 总之,让该文件回到最近一次git commit 或git add 之后的状态。# 注意:如果没有--,就变成了切换分支的命令了。$ git checkout -- [file]
# 既可以回退版本,也可以把暂存区的修改回退到工作区。# 当我们用HEAD时,表示最新的版本。$ git reset
# 把暂存区的修改撤销(unstage),回退到工作区。# 注意:在 Git 中任何已提交的东西几乎总是可以恢复的。# 甚至那些被删除的分支中的提交或使用 –amend 选项覆盖的提交也可以恢复。# 然而,任何未提交的东西丢失后很可能再也找不到了。$ git reset HEAD [file]

删除文件

# 删除工作区文件,并且将这次删除放入暂存区。$ git rm [file1] [file2] ...
# 强制删除版本库中有修改的文件,不做更新检查。$ git rm -f 文件
# 删除暂存区的文件,把文件从版本库中删除,但让文件保留在工作区且不被 Git 继续追踪(track),# 通常适用于在 rm 之后把文件添加到 .gitignore 中的情况。$ git rm --cached 文件

修补

# 在暂存区与工作目录或者暂存区(默认是工作目录)打补丁$ git apply [--index|--cached] patchname.patch
# 反向打补丁$ git apply --reverse|-R patchname.patch
# 打补丁,将没有冲突的文件合并,将有冲突的文件标记出来,并生成对应的 .rej 文件$ git apply --reject patchname.patch
# 将另一个分支上面的指定提交应用到当前分支上$ git cherry-pick 
# 将指定分支上面的最后一次提交应用到当前分支上$ git cherry-pick banchname
# 将另一个分支上面的A和B两个提交应用到当前分支上$ git cherry-pick 
# 将另一个分支上面的从A到B的所有提交应用到当前分支上(提交 A 必须早于提交 B,否则命令将失败,但不会报错,此外,提交A将不会包含在Cherry pick中)$ git cherry-pick 
..
# 将另一个分支上面的从A到B的所有提交应用到当前分支上(提交 A 必须早于提交 B,否则命令将失败,但不会报错,提交A将会包含在Cherry pick中)$ git cherry-pick 
^..
# 将指定分支上所有修改应用到当前分支上$ git rebase branchname
# 将第一个指定分支上所有修改应用到第二个分支上$ git rebase branchname branchname

rebase 加上 -i 会提供交互式的变基操作。

# 恢复一个指定提交$ git revert 

调试

# 开始二分查找。$ git bisect start
# 设置指定提交(默认是当前分支)为bad。$ git bisect bad [
]
# 设置指定提交(默认是当前分支)为good。$ git bisect good [
]

输入了上面三个命令后就会自动开始二分查找,我们之后只需要标记当前提交时bad还是good就行了,如果当前找的的提交时bad就输入 git bisect bad ,否则输入 git bisect good 直到找到有bug的提交。

# 查看指定文件所有的操作者,看看是谁错误地修改了该文件。$ git blame filename
# 在工作目录中所有文件中搜索 keys。$ git grep keys
# 在暂存区中所有文件中搜索 keys。$ git grep --cached keys

远程仓库操作

# 查看所有与本地仓库关联的远程仓库。$ git remote
# 查看所有与本地仓库关联的远程仓库,并显示 url。$ git remote -v
# 参数 remote 通常都是缩写名 origin,# 可以得到远程分支更为详细的信息以及 pull 和 push 相关提示信息。$ git remote show [remote]
# 添加与本地仓库关联的远程仓库。# 其中,shortname 一般是 origin,也可以是其他字符串,用来代替整个 url。$ git remote add [shortname] [url]

如果拉的是 master 分支的代码,然后才创建自己的分支,可以使用 git remote update origin -p 更新远程分支

然后用 git checkout -b 本地分支名 origin/远程分支名 创建本地分支并且自动切换到自己的远程分支上

master分支更新代码到本地分支:

$ git fetch origin master:temp$ git merge temp$ git branch -d temp
# 为远程仓库重命名。$ git remote rename oldname newname
# 移除远程仓库。$ git remote remove remote-name
# 推送本地修改到 origin。$ git push
# 关联后,由于远程库是空的,使用该命令第一次推送 master 分支的所有内容,# Git不但会把本地的master分支内容推送到远程新的master分支,# 还会把本地的master分支和远程的master分支关联起来,# 后续再推送的时候就可以省略后面三个参数了,其中参数 -u 代表上游(upstream)的意思。$ git push -u origin master
# 推送本地仓库指定分支到远程仓库指定分支(默认是与本地分支同名的远程分支),# 默认是不推送标签到远程仓库的,加上 –tags 就会推送标签。$ git push remoterepository localbranch[:remotebranch] [--tags]
# 抓取远程库最新提交,拉取并合并。$ git pull
# 拉取指定远程仓库指定分支到本地仓库指定分支(默认是当前分支)$ git pull remoterepository branchname[:localbranch]
# 下载远程仓库 origin 到本地$ git fetch origin
# 下载指定远程仓库到本地$ git fetch [remote]
# 下载指定远程仓库指定分支到本地$ git fetch [remote] [branch]

分支管理

# 列出本地当前所有分支,方便查看。当前分支前面会标有一个 * 号。$ git branch
# 新建一个分支,但依然停留在当前分支。$ git branch [branch]
# 以特定提交为基创建分支。$ git branch [branch] 
# 普通删除分支(相对强制删除而言)。# 一般情况下,先合并完分支,然后再删除,否则会删除失败,除非使用 -D 参数强制删除。$ git branch -d [branch]
# 强行删除分支,尤其适用分支内容有了新的修改但还没有被合并的情况。$ git branch -D [branch]
# 移动或者删除分支。$ git branch -m [oldbranchname] newbranchname
# 强制移动或者删除分支。$ git branch -M [oldbranchname] newbranchname
# 列出所有被跟踪的远程分支。$ git branch -r
# 删除被跟踪的远程分支。$ git branch -r -d [branch]
# 列出所有本地分支与被跟踪的远程分支。$ git branch -a
# 建立本地分支和远程分支的关联。$ git branch --set-upstream [branch] origin/[branch]
# 检查本地仓库分支与远程仓库分支的差异$ git checkout
# 切换到指定分支,并更新工作区。$ git checkout [branch]
# 切换到指定tag,如果存在tag与branch同名,优先切换分支。$ git checkout [tag]
# 新建分支并切换到该分支上。$ git checkout -b [branch]
# 强制新建分支并切换到该分支上。$ git checkout -B [branch]
# 将指定分支合并到当前分支上(默认附带提交操作),在 merge 后面使用 -m 
表示提交消息。$ git merge [branch]
# 将指定提交合并到当前分支上$ git merge 
# 将 oldbranchname 分支合并到 newbranchname 分支上$ git merge oldbranchname newbranchname
# 将指定分支上所有修改放入当前分支工作目录与暂存区,不提交$ git merge --squash [branch]
# 将指定分支上所有修改放入当前分支工作目录与暂存区,并提交$ git merge no--squash [branch]
# 参数 --no-ff 表示禁用 Fast forward 快进模式,用普通模式合并,# 这样合并后的历史有分支,能看出来曾经做过合并,# 而 Fast forwad 合并就看不出来曾经做过合并。$ git merge --no-ff -m "message" [branch]
# 在 merge 命令执行之后出现冲突时执行该命令,用来解决合并的冲突,# 冲突解决完了不要忘了提交$ git mergetool
# 查看分支的合并情况,包括分支合并图、一行显示、提交校验码缩略显示。$ git log --graph --pretty=oneline --abbrev-commit
# 储藏工作目录与暂存区的状态到堆栈中# 把当前分支的工作现场储存起来,等以后恢复现场后继续工作。# 一般适用于还没有 commit 的分支代码。$ git stash
# 显示所有储藏信息。$ git stash list
# 恢复到指定储藏的状态(默认是最近一次储藏的状态)$ git stash apply [stash@{
id}]
# 并从堆栈中移除指定储藏(默认是最近一次储藏)$ git stash drop [stash@{
id}]
# 用 git stash apply 命令恢复最近 stash 过的工作现场,# 但是恢复后,stash 内容并不删除,用 git stash drop 命令来删除。# apply 和 drop 后面都可以加上某一指定的 stash_id。$ git stash apply [stash@{
id}] + git stash drop [stash@{
id}]
# 恢复到指定储藏的状态(默认是最近一次储藏的状态),并从堆栈中移除该储藏# 相当于git stash apply + git stash drop,# 恢复回到工作现场的同时把 stash 内容也删除了。$ git stash pop [stash@{
id}]
# 在本地 master 上进行变基操作。$ git rebase 目标分支(通常是 master)

标签管理

# 查看所有标签。这里标签不是按照时间列出,而是按照字母排序。$ git tag
# 列出符合一定条件的标签$ git tag -l 'v1.*'
# 新建标签$ git tag [tag]
# 在需要打标签的分支上创建一个轻量标签(lightweight),默认为 HEAD,# 也可以指定一个 commit id。$ git tag [tag] [commit id]
# 创建附注标签(annotated),# 用 -a 指定标签名,-m 指定说明文字,也可以指定一个 commit id。$ git tag -a [tag] -m "message" [commit id]
# 删除一个本地标签。# 因为创建的标签都只存储在本地,不会自动推送到远程。# 所以,打错的标签可以在本地安全删除。$ git tag -d [tag]
# 查看标签信息。$ git show [tag]
# 推送本地某个标签到远程,# 默认情况下,git push 命令并不会推送标签到远程,必须显式推送。$ git push origin [tag]
# 参数 –tags 表示一次性推送全部未推送到远程的本地标签,# 当其他人从仓库中克隆或拉取,他们也能得到那些标签。$ git push origin --tags
# 删除一个远程标签。要先从本地删除,再用该命令从远程删除。$ git push origin :refs/tags/[tag]
# 查看指定提交或者指定标签(默认是最近一次提交)的注解标签信息。$ git describe [
|
]
# 查看指定提交或者指定标签(默认是最近一次提交)的标签信息。$ git desribe --tags [
|
]
# 查看指定提交或者指定标签(默认是最近一次提交)的引用信息。$ git desribe --all [
|
]

设置

# 配置全局用户名,# 若不要 –global ,或者将 global 改为 local ,则表示配置局部用户名。$ git config --global user.name lavor
# 配置全局电子邮箱。$ git config --global user.email lavor@qq.com
# 配置别名,为git命令配置别名,# 还可以配置复合操作,比如 git config --global alias.pom 'push origin master' # 注意复合操作中不可以带 - 与 ""$ git config --global alias.cm commit
# 显示所有配置信息。$ git config --list
# 显示帮助信息,会显示一些常见git命令及其意义$ git help

其他

# 可能是 .gitignore 写得有问题时,使用该命令找出到底哪个命令写错了。$ git check-ignore -v [file]
# 使用 git st 代替 git status 命令。$ git config --global alias.st status
# 添加仓库到指定目录,使之成为本仓库的子模块。$ git submodule add repository-url dir
# 初始化子模块。$ git submodule init
# 更新子模块。$ git submodule update
你可能感兴趣的文章
3.7.4 - Indexing and Slicing Strings
查看>>
3.7.5 - Modifying Strings
查看>>
3.7.6 - String Methods
查看>>
3.8 - Using the Print Function
查看>>
3.9.1 - Lists in Python
查看>>
3.9.2 - Lists - Adding and Removing Objects
查看>>
3.9.3 - Sorting Lists
查看>>
3.10 - Maya Commands: ls
查看>>
3.11 - Dictionaries in Python
查看>>
3.12 - Tuples in Python
查看>>
4.4 - For Loops
查看>>
4.2.2 - Logical and/or Operators
查看>>
Lesson 4 Part 2 Softmax Regression
查看>>
文章中运用到的数学公式
查看>>
Projective Dynamics: Fusing Constraint Projections for Fast Simulation
查看>>
从2D恢复出3D的数据
查看>>
glm 中 数据类型 与 原始数据(c++ 数组)之间的转换
查看>>
Derivatives of scalars, vector functions and matrices
查看>>
the jacobian matrix and the gradient matrix
查看>>
VS2010 将背景设为保护色
查看>>