日常使用的Git命令大全

做研发的朋友不可能不知道Git,Git在研发界里可谓是妇孺皆知。平时看到大佬都在流畅的敲命令行而你还在默默地使用可视化工具,是不是瞬间感觉自己弱爆了。今天来列出一些使用频率较高的Git命令,掌握它其实你也可以拥有敲命令行的快感......


init & clone

1、git init project_name

#初始化本地git仓库,会在project_name下生成.git文件夹

2、git clone url(ssh/https) project_name

#从远程克隆已有的项目到本地project_name目录

3、git add .

#将当前目录下的所有新增加的和修改的文件,不包括已删除的文件添加到暂存区

4、git add file_name

#将文件file_name添加至暂存区, 文件名以空格分开可添加多个文件

5、git add -A

#添加所有新增加的和修改的和已删除的文件至暂存区

5、git add --all

#添加所有新增加的和修改的和已删除的文件至暂存区

6、git add -p fileName(选择E,打开编辑器去掉不需要的部分

#只提交一个文件的一部分内容


mv & rm

1、git mv fileName newFileName

#文件重命名

2、git rm fileName

#删除暂存区和工作区里的文件

3、git rm --cached || rm .git/index

#只删除暂存区里的文件


reset & checkout

1、git reset --hard HEAD || commitId

#此撤销不会在历史记录中找到,就好像没有提交一样(git reflog才可查看记录)

--mixed: (默认值) 暂存区的内容会被撤销的版本内容覆盖,工作区不会被覆盖

--soft: 暂存区和工作区的内容不会被撤销的版本所覆盖,内容保持原样

--hard: 暂存区和工作区的的内容都会被撤销的版本所覆盖

#只跟踪被修改的文件

git push -f origin master

#如果撤销的版本已经同步到远程分支,那么撤销后再次同步到远程分支会提示当前提交晚于远程的版本,提交不成功,需要强制推送到远程版本,(此操作很危险,如果远程版本已经被别人同步过,强制推送会出现数据丢失的情况)

2、git checkout HEAD fileName (commit => index => workplace)

#暂存区和工作区均被覆盖

3、git revert -n commitId 

#此撤销会生成新的提交,撤销版本后面的版本依然保留

4、git checkout -- fileName 

#从暂存区中撤销覆盖工作区的内容

5、git chekout -b dev origin/dev 

(git checkout -t origin/dev)

(git checkout --track origin/dev)

#拉取远程dev分支到本地


diff

1、git diff commitId fileName

#对比工作区和提交差异

2、git diff fileName

#对比工作区和暂存区的差异

3、git diff --cached fileName

#对比暂存区和版本库的差异

4、git diff head fileName 

#对比工作区和版本库的差异

5、git diff --stat

#统计新增和删除了多少行

6、git diff --numstat

#统计具体新增和删除了哪一行


clean

1、git clean -f 

#清除工作区的文件

2、git clean -d

#清除工作区的目录


blame

1、git blame fileName

#查看一个文件里谁修改了什么东西


commit

1、git commit -am "强制提交,跳过暂存区"

#强制提交,跳过 add不包含新增的文件,提交后暂存区里有记录

2、git commit --amend -m "编辑上一次提交"

#编辑上一次提交,会生成新的提交记录

3、git commit -m "暂存区提交到本地仓库"

#将暂存区里的内容提交至本地仓库,(只提交暂存区里的内容)

4、git commit --allow-empty -m "允许空提交"

#允许空内容提交,会有新的提交记录


branch

1、git branch -f newBr

#强制新建分支覆盖原有分支

2、git checkout -B newBr

#强制新建并切换到新分支

3、git branch --remote

#查看远程分支

4、git branch -m oldBr newBr

#分支重命名

5、git checkout -b newBr commitId

#基于某次提交创建新分支

6、git stash branch newBr

#基于存储建立新分支

7、git reflog show --date=iso master

#查看分支创建时间

8、git branch -d branch1 branch2

#同时删除多个分支

9、git branch -D branch

#强制删除分支

10、git branch(cat .git/HEAD)

#查看当前分支

11、git fetch -p

#移除远程仓库上不存在的分支

12、 git merge newBr

#将newBr分支合并到当前分支

快进(fast-forward):当你试图合并两个分支时, 如果顺着一个分支走下去能够到达另一个分支,那么 Git 在合并两者的时候, 只会简单的将指针向前推进(指针右移),因为这种情况下的合并操作没有需要解决的分歧

合并提交:当两个分支相对于共同的祖先有了多次的提交,合并时会生成新的提交,它的有两个父节点

合并冲突:当两个分支对同一文件同一地方做了不同的修改,合并时就会产生冲突,此时两个分支合并了,但是没有合并提交,需要手动去解决冲突再手动提交(此时会出现未合并状态的文件,解决完冲突后使用git add 冲突的文件名 来标记已解决的冲突)

13、git branch -v

#查看每个分支的最后提交

--merged 与 --no-merged 这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分支的分支

14、git fetch 

#从远程拉取本地没有的数据,它不会影响工作区的内容,会让你自己合并

15、git pull(git fetch + git merge)

#从远程拉取本地没有的数据,同步工作区暂存区的内容

16、git push origin --delete dev

#删除远程分支

17、git rebase master 

(git rebase master(目标分支) experiment(主题分支))

git checkout master

git merge experiment

#变基,将当前experiment分支并到master分支上,然后切换到master分支上,进行合并

merge是通过三方合并(c2\c3\c4),最终生成新的提交:

merge和rebase合并的结果没有什么区别,但是rebase使得整个过程更加整洁,没有看到历史分叉

变基的风险:

变基操作的实质是丢弃一些现有的提交,然后相应地新建一些内容一样但实际上不同的提交。如果你已经将提交推送至某个仓库,而其他人也已经从该仓库拉取提交并进行了后续工作,此时,如果你用 git rebase 命令重新整理了提交并再次推送,你的同伴因此将不得不再次将他们手头的工作与你的提交进行整合,如果接下来你还要拉取并整合他们修改过的提交,事情就会变得一团糟


log

1、git log

#不带参数默认会按先后顺序列出所有提交

2、git log -p (git log --patch)

#列出每次提交引入的差异,按补丁的格式展示

3、git log -n

#按条数输出提交记录

4、git log --stat

#列出每次提交的粗略统计信息

5、git log --pretty=子选项

--oneline:提交按一行显示

--format:自定义格式化输出,其格式化参数如下:

6、git log --graph

#选项添加了一些 ASCII 字符串来形象地展示你的分支、合并历史


stash

1、git stash save "储藏编辑过的文件"

#修改当前分支到一半的时候,突然想还原,就可以将它储藏起来,只对修改的文件生效

2、git stash list

#查看储藏列表

3、git stash apply

#应用最新的储藏内容,使用后仍然存在于历史记录中

4、git stash pop

#应用最新的存储藏内容,使用后并在历史记录中删除掉

5、git stash drop 

#删除最新的储藏


cat-file

1、git cat-file -t commitId 

#查看此次提交的具体git对象

2、git cat-file -p commitId

#查看git对象具体信息

3、wc -l fileName

#查看文件行数


grep

1、git  grep -n www

#检索哪一行有www

2、git grep --name-only www

#检索文件名是否有www

3、git grep -c www

#统计文件中有几行出现www


其他

git log -p 

#查看历史具体信息

git reflog

#获取所有操作历史,包括撤销的提交

git show -s

#查看提交信息

git ls-files --stage

#查看暂存区的内容

rm -fr .git

#清空版本库

git hash-object fileName

#查看文件对应的hash值

git cherry-pick commitId

#两个分支做相同的提交


想看更多内容,请关注我的公众号:


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