Git常用命令清单

目录

之前一直借助于 Source-tree 这种图形化 Git 工具,一次在帮同事解决 Git 分支合并问题时,用的同事电脑,没有 Source-tree ,感觉完全不会用了,什么命令也没记住。恶补一下命令,重新学一遍 Git 教程,发现好多常用的操作,用命令还是非常方便的。
这里整理汇总下:

一、Git alias

在开始常用命令前,先推荐下使用 alias 定义 git 常用命令的别名,合理使用简写可以大幅提高效率。

常用 git 命令,可以在 ~/.gitconfig 文件中使用 alias 定义简写,以下是我个人常用 alias:

[alias]
    st = status -s
    ci = commit
    l  = log --oneline --decorate -12 --color
    ll = log --oneline --decorate --color
    lc = log --graph --color
    co = checkout
    br = branch
    ba = branch -a
    rb = rebase
    dci = dcommit
    lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

另,~/.gitconfig 文件中,可以查看当前 user 的 git 配置信息

二、branch 分支操作

查看分支信息


# 列出所有本地分支
// git br
$ git branch

# 列出所有本地分支和远程分支
// git ba
$ git branch -a

新建分支

# 从当前分支新建一个分支。但依然停留在当前分支 
// git br [本地xxx]
$ git branch [branch-name]
// 常用于:对当前 分支做个备份

# 从指定的远程分支,拉一个本地分支。并切换到该分支
// 常用于: 从远端 develop 拉一个 本地 feature/xxx 分支
$ git checkout -b newBrach origin/master

# 新建一个分支,指向指定commit。但依然停留在当前分支 
$ git branch [branch] [commit]

# 新建一个分支。并切换到该分支
// git co -b [local or remote/branch-name]
$ git checkout -b [branch-name]

# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]

切换分支

# 切换到指定分支,并更新工作区
// git co [branch-name]
$ git checkout [branch-name]

# 切换到上一个分支
$ git checkout -

删除分支

# 删除本地分支
// git br -d [branch-name]]
$ git branch -d [branch-name]
$ git branch -D //强制删除

# 删除远程分支
// git br -dr [remote/branch]
// eg:  git br -dr origin/xxx_name
$ git branch -dr [remote/branch]

合并分支

# 合并指定分支到当前分支
$ git merge [branch]

# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]

三、tag 分支操作

在 Git 中 tag 可以看做是指向某个 commit 的特殊分支

列显已有 tag

$ git tag

添加 tag

$ git tag v1.4.0

// 添加一个带 commit log 的 tag
$ git tag -a v1.4 -m 'my version 1.4'

// 为某个指定的 commit 打上 tag
$ git tag -a v1.2 9fceb02

// 查看 tag 信息
$ git show v1.4

推送 tag

// git push 不会将本地的 tag push 到 origin

# push 指定 tag name
$ git push origin v1.0
# push 全部 tag
$ git push origin --tags

删除 tag

// 删除本地 tag
$ git tag -d v0.9

// 删除远端 tag
$ git push origin :refs/tags/0.1.0
## 明确的表示删除
$ git push --delete origin v1.1

四、git pull

git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。

Merge 型 的 pull

如果本地分支,在 checkout 后,有 commit, git pull 就会增加一个 Merge log
如果本地分支没有 新 commit,等于直接 fetch、pull


// 将远端的 A 分支的代码,拉到本地 B 分支 (会产生一个 Merge log)
$ git pull origin [remote_name]:[local_name]
// 如果是往当前 本地分支 pull,则冒号后面的部分可以省略
$ git pull origin [remote_name]


// 实质上,这等同于先做git fetch,再做git merge。
$ git fetch origin
$ git merge origin/next

# Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。 就是说,本地的master分支自动"追踪"origin/master分支。

// 如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。
$ git pull origin

// 如果当前分支只有一个追踪分支,连远程主机名都可以省略。
$ git pull
// 上面命令表示,当前分支自动与唯一一个追踪分支进行合并

rebase 型 pull


// 如果合并需要采用rebase模式,可以使用--rebase选项。
$ git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
// git pull --rebase origin [origin_name]:[local_name]

// 如果是 rebase 到当前分支,可省略 : 后
$ git pull --rebase origin [origin_name]
// 如果 rebase 的远端分支,是当前分支 track 的,[origin_name] 可省略
$ git pull --rebase origin 

五、Git push

// 将当前 loca_name 分支 push 到远端,命名为 new_name
$ git push <远程主机名> <本地分支名>:<远程分支名>
// git push origin loca_name:new_name

# 如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
# 如果当前分支只有一个追踪分支,那么主机名都可以省略。
// 会将本地所有分支都 对应 push (慎用)
$ git push

// push 可以用来删除
$ git push origin --delete master

# 如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用--force选项。
$ git push --force origin 

# 最后,git push不会推送标签(tag),除非使用--tags选项。
$ git push origin --tags

六、代码回滚

快速合并缓存区到上一个 commit

// 将 add 到缓存区的内容,和上一个 commit 一起, rebase 成了一个新的 commit
$ git commit --amend

// 便于将漏修改的,或是修改错误的内容,合并到上一个 commit 中。而不用提交两个 commit,然后 rebase 成一个
// 注:如果修改过了, 只能 push -f 到远端

checkout 到指定 commit

这对于快速查看项目旧版本来说非常有用

$ git checkout [commit id]

// check 到往前指定此的 commit
$ git checkout HEAD~2 

git Revert

Revert撤销一个提交的同时会创建一个新的提交。

# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit]

git reset

  • 将已经加到缓存区的内容(仅打了本地 commit),移除到工作区
$ git reset HEAD

$ git reset HEAD~2
  • 从缓存区重置,不删除修改的地方
// 将缓存区中的指定文件,移到工作区
// 缓存区中的,指的是 add 后的
git reset <file>

// 将缓存区中的全部文件,移到工作区
$ git reset

// 将本地 commit 历史中的 commit 移除到 工作区 (未 add 状态)
$ git reset [commit_id]

删除式 reset

// 缓存区和工作区的,都会被完全移除(删除)
$ git reset --hard

// 将本地 commit 历史中的直接删除
$ git reset --hard <commit>

# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit]

参考:
常用 Git 命令清单 - 阮一峰
Git远程操作详解 - 阮一峰
Git 配置别名 - 廖雪峰
果壳中的 Git

特别推荐:
jaywcjlove —— Git常用命令清单

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • 一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。 下面是一些常用Gi...
    tiandashu阅读 230评论 0 0
  • Git常用命令清单一、新建代码库 在当前目录新建一个Git代码库 $ git init 新建一个目录,将其初始化为...
    大飞哥阅读 247评论 0 0
  • 这里是我的笔记,记录一些git常用和一些记不住的命令,这个笔记原本是基于 颜海镜的文章增加的,后面慢慢增加了许多内...
    Lefter阅读 436评论 0 3
  • “ 我们总在最不懂爱情的年龄,遇见了最美的爱情!却在错过最好的年华,邂逅最美的期待! ” 1、太多的自以为,断送了...
    初月皎皎阅读 293评论 0 1
  • 昨天早上,妈妈的老年旅游团开拔了 当天晚上到达北京 今天开始征途 傍晚看着妈妈上传的图片 心中一片感慨…… 妈妈,...
    夏夏榆荚阅读 503评论 0 0