前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git 命令

Git 命令

作者头像
haifeiWu
发布2020-02-10 17:53:22
8320
发布2020-02-10 17:53:22
举报

熟练使用工具决定工作效率,Git 是工作中常见的分布式版本控制系统。本篇文章总结一些常用的命令以及原理。

Git 命令

配置

git config []

命令

描述

git config –global …

全局配置

git config –local …

本地项目

git config –global user.name/email …

配置全局名称和邮箱

git config –list

参看配置

日志

git log [] [] [[–] …] git reflog 引用日志

命令

描述

git log –stat

简略的统计信息

git log -count

显示记录条数

git log –pretty=

可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)

远程

git remote [-v | –verbose]

命令

描述

git remote -v

查看远程仓库

git remote add

添加远程仓库

git remote rename

重命名远程仓库

git remote remove

移除远程仓库

git remote show

参看远程仓库

标签

git tag [-a | -s | -u ] [-f] [-m | -F ] [] git tag -d … git tag -l [-n[]] [–contains ] [–no-contains ] [–points-at ] [–format=] [–[no-]merged []] […] git tag -v [–format=] …

命令

描述

git tag -l

查看 tag 列表

git tag

创建轻量级标签

git tag -a -m

创建附注标签

git tag -a 9fceb02

后期给某一提交打标签

git show

查看 tag 信息

git push origin

推送到远程服务器

git push origin –tags

不在服务器的标签全部推送上去

git tag -d

删除标签

git push :refs/tags/

从任何远程仓库中移除这个标签

分支

git branch [] [-r | -a] [–merged | –no-merged] git branch [] [-l] [-f] [] git branch [] [-r] (-d | -D) … git branch [] (-m | -M) [] git branch [] (-c | -C) [] git branch [] [-r | -a] [–points-at] git branch [] [-r | -a] [–format]

命令

描述

git branch -a

远程和本地的分支列表

git branch -d

删除分支

git branch -D

删除分支,甚至没有合并

git branch -m

移动或者重命名分支

-vv

查看设置的所有跟踪分支

git push origin –delete

删除远程分支

检出

git checkout [] git checkout [] [] – …

命令

描述

git checkout -b origin/

创建并检出新分支

git checkout – …

恢复文件在工作区的修改

合并

git merge [] […] git merge –abort git merge –continue

命令

描述

git merge –abort

抛弃合并过程并且尝试重建合并前的状态

git merge –continue

合并冲突解决

推送

git push [] [ […]]

重置

git reset [–mixed | –soft | –hard | –merge | –keep] [-q] [] git reset [-q] [] [–] … git reset –patch [] [–] […]

命令

描述

git reset –mixed

重置已提交和缓存区域

git reset –soft

仅仅重置已提交

git reset –hard

重置已提交、缓存区域和工作目录

三棵树

Git 的思维框架(将其作为内容管理器)管理三棵不同的树。“树” 在我们这里的实际意思是 “文件的集合”,而不是指特定的数据结构。 (在某些情况下索引看起来并不像一棵树,不过我们现在的目的是用简单的方式思考它。)

Git 作为一个系统,是以它的一般操作来管理并操纵这三棵树的:

用途

HEAD

上一次提交的快照,下一次提交的父结点

Index

预期的下一次提交的快照

Working Directory

工作目录

HEAD

HEAD 是当前分支引用的指针,它总是指向该分支上的最后一次提交。这表示 HEAD 将是下一次提交的父结点。 通常,理解 HEAD 的最简方式,就是将它看做 你的上一次提交 的快照。 参看快照命令:git cat-file -p HEAD

注:cat-file 是底层命令,它们一般用于底层工作,在日常工作中并不使用。不过它们能帮助我们了解到底发生了什么。

索引(Index)

索引是你的 预期的下一次提交。 我们也会将这个概念引用为 Git 的“暂存区域”,这就是当你运行 git commit 时 Git 看起来的样子。

Git 将上一次检出到工作目录中的所有文件填充到索引区,它们看起来就像最初被检出时的样子。 之后你会将其中一些文件替换为新版本,接着通过 git commit 将它们转换为树来用作新的提交。

工作目录(Working Directory)

最后,你就有了自己的工作目录。 另外两棵树以一种高效但并不直观的方式,将它们的内容存储在 .git 文件夹中。 工作目录会将它们解包为实际的文件以便编辑。 你可以把工作目录当做 沙盒。在你将修改提交到暂存区并记录到历史之前,可以随意更改。

工作流程

Git 主要的目的是通过操纵这三棵树来以更加连续的状态记录项目的快照。

reset-workflow
reset-workflow

简单的总结如下:

  1. 在工作目录编辑文件;
  2. git add 后,Index 会保存并指向工作目录的修改;
  3. git commit 后,会提交新的修改,HEAD 指向改新的修改。

命令区别

fetch、pull

当 git fetch 命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。它只会获取数据然后让你自己合并。

然而,git pull 在大多数情况下它的含义是一个 git fetch 紧接着一个 git merge 命令。

reset、checkout

reset 命令会以特定的顺序重写这三棵树,在你指定以下选项时停止:

  • 移动 HEAD 分支的指向 (若指定了 –soft,则到此停止)
  • 使索引看起来像 HEAD (若未指定 –hard,则到此停止)
  • 使工作目录看起来像索引

运行 git checkout [branch] 与运行 git reset –hard [branch] 非常相似,它会更新所有三棵树使其看起来像 [branch],不过有两点重要的区别。

首先不同于 reset –hard,checkout 对工作目录是安全的,它会通过检查来确保不会将已更改的文件弄丢。 其实它还更聪明一些。它会在工作目录中先试着简单合并一下,这样所有还未修改过的文件都会被更新。 而 reset –hard 则会不做检查就全面地替换所有东西。

第二个重要的区别是如何更新 HEAD。 reset 会移动 HEAD 分支的指向,而 checkout 只会移动 HEAD 自身来指向另一个分支。

下面的速查表列出了命令对树的影响。

HEAD

Index

Workdir

WD Safe?

Commit Level

reset –soft [commit]

REF

NO

NO

YES

reset [commit]

REF

YES

NO

YES

reset –hard [commit]

REF

YES

YES

NO

checkout [commit]

HEAD

YES

YES

YES

File Level

reset (commit) [file]

NO

YES

NO

YES

checkout (commit) [file]

NO

YES

YES

NO

命令快照

命令

描述

git config

设置与配置

git help

帮助

git init

初始化

git clone

克隆

git add

将内容从工作目录添加到暂存区

git status

为你展示工作区及暂存区域中不同状态的文件

git diff

查看任意两棵树的差异

git difftool

可视化工具

git commit

提交

git reset

重置

git rm

从工作区,或者暂存区移除文件

git mv

在暂存区移到文件

git clean

从工作区中移除不想要的文件的命令

git branch

分支管理

git checkout

检出

git merge

合并

git mergetool

合并工具

git log

历史记录

git stash

临时地保存一些还没有提交的工作

git tag

标签

git fetch

从远程仓库中拉取

git pull

从远程仓库中拉取并合并

git push

推送到远程仓库

git remote

远程仓库记录的管理工具

git archive

创建项目一个指定快照的归档文件

git submodule

子模块

git show

显示一个标签或一个提交的信息

git shortlog

归纳 git log 的输出

git describe

描述

git bisect

二分查找

git blame

文件最后的修改者

git grep

查找任何字符串

git cherry-pick

获得并引入单个提交中的变更

git rebase

顺序合并多个提交

git revert

撤销或者倒转

git reflog

引用日志

作 者:ChanghuiN 原文链接:https://www.hchstudio.cn
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Git 命令
    • 配置
      • 日志
        • 远程
          • 标签
            • 分支
              • 检出
                • 合并
                  • 推送
                    • 重置
                    • 三棵树
                      • HEAD
                        • 索引(Index)
                          • 工作目录(Working Directory)
                            • 工作流程
                            • 命令区别
                              • fetch、pull
                                • reset、checkout
                                • 命令快照
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档