Git命令整理 2020-05-17

<--------基础-------->

  • git clone
  • git add ./ --- 将工作区的更改添加到暂存区
  • git commit -m "这里填本次提交的说明"
  • git pull --- 相当于git fetch + git merge
  • git push --- 将本地分支推送到远程仓库

<--------查看类-------->

  • git status --- 查看文件哪些文件被修改(方便掌握仓库当前的状态)
  • git diff <file>--- 查看文件具体修改内容
  • git log --- 查看提交历史 -- 按q退出
    1.git log --oneline --graph
  • git reflog --- 查看操作记录 -- 包括合并、重置、还原,基本上包含你对你的分支所做的任何修改。
  • git show
  • git blame <file> --- 查看<file>被何人在何时修改了什么内容
  • git remote -v ---- 查看远程仓库地址
  • git branch --- 查看本地分支
    1.git branch -av --- 查看所有分支(包括线上)
  • git show 查看提交的详情
  1. git show commit id 查看某条提交的详情

<------------操作类------------>

  • git restore
    1.git restore <file> --- 重置工作区里的<file> 首选
    2.git restore . // 重置工作区所有更改
    3.git restore --staged <file> // 将暂存区里的<file>恢复到工作区

  • git revert <commit> --- 回退版本并创建一个新提交记录本次回退

  • git reset --- 可以回退版本,也可以把暂存区的修改回退到工作区
    1.git reset --hard head^ === 回退一个版本并删除所有修改 ( --hrad 表示是硬重置)
    2.git reset <commit> --- 回退一个版本并保留所有修改(软重置)
    3.git reset --keep <commit> === 回退并保存未提交(uncommitted)的修改
    4.git reset HEAD <file> --- 把暂存区的修改撤销掉(unstage),重新放回工作区 // git reset <file>
    5.git reset --hard commit_id === 回退到过去具体某个版本(要回到未来可先用git reflog查看再执行reset)

  • git clean
    1.git clean -nxdf # dry-run,先看下即将删除那些文件,再执行下面的危险命令
    2.git clean -df # 删除所有未跟踪的文件和目录(不包含.gitignore的文件),危险命令
    3.git clean -xdf # 删除所有未跟踪的文件和目录(同时包含.gitignore的文件),危险命令

  • git branch
    1.git branch <new-branch> --- 创建新分支
    2.git branch -d <branch> --- 删除本地分支
    3.git branch -dr <remote/branch> --- 删除远程分支

  • git checkout
    1.git checkout . // 重置工作区所有更改
    2.git checkout HEAD <file> --- 重置<file> // 或者git checkout -- file // git checkout <file>
    3.git checkout --track <remote/branch> === 以远程分支为基础创建一个同名本地分支
    4.git checkout -b --- 创建并切换到新分支 === 等于git branch + git checkout
    5.git checkout <branch> --- 切换当前分支(HEAD分支)

  • git rebase --- 把本地未push的分叉提交历史整理成直线,使得我们在查看历史提交的变化时更容易
    1.git rebase master --- 在master的基础上将当前分支(head)变基 ,即将当前分支的提交追加到master分支的提交后面
    (如果rebase过程中由于出现冲突而终止,解决完冲突后,需要通过 git rebase -continue继续)
    2.git pull --rebase === 相当于git fetch + git rebase ---将远程分支的提交增加到本地分支
    3.git rebase --abort === 中止rebase

合并两个分支 rebase 的用法:
$ git checkout feature
$ git rebase master  --- 先在 feature 上 rebase on master,把 feature 分支的改动追加到了 master 分支后面
$ git checkout master
$ git merge feature --- 把 feature 分支 merge 到 master 分支。由于 Git 发现不需要合并代码,只需要移动头指针就可以了,所以快速移动(fast forward)头指针到最前面,master 分支这时就有所有最新代码,起到了合并分支的作用。

tips:  
- 这种rebase 的方法是把新的 commit 不断的追加到 master 后面
- 在现实的开发过程中,严格禁止在公共分支上 rebase on 其他分支(譬如不允许在 master 分支上直接运行 git rebase branchname)。使用 merge 是最保险的合并分支方式,rebase 能帮助形成清晰的线性时间线,但是 rebase 的坏处是丢失了一部分提交操作历史。

总结:
- 和远程仓库同步当前分支的时候使用 pull --rebase 的方式。
- 合并分支的使用 feature rebase on master,master merge feature 的方式。

*git rebase 使用场景:1、本地与远程同一分支提交历史不一致  2、本地不同分支之间的合并*
  1. git rebase -i

git rebase -i 命令可以压缩合并多次提交
格式:git rebase -i [startpoint] [endpoint]
其中-i的意思是–interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。

在查看git的log后,可以使用如下命令

// 合并从当前head到15f745b(commit id)
git rebase -i 15f745b
或:
// 合并最近的两次提交
git rebase -i HEAD~2

【注意】 命令中commitid是两次提交的前一个commitid
                第一个pick不可修改,可以将后面的squash
                如果页面显示noop,就是你的commitid选的是最新提交的commit,这样是不对的

执行这个命令后会跳到一个vi编辑器
里面的提示有:
pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)

  • git stash // 贮藏
    1.git stash apply // 恢复贮藏
    2.git stash pop // 恢复贮藏

  • git merge XX--squash

--squash选项的含义是:本地文件内容与不使用该选项的合并结果相同,但是不提交、不移动HEAD,因此需要一条额外的commit命令。其效果相当于将XX分支上的多个commit合并成一个,放在当前分支上,原来的commit历史则没有拿过来。
判断是否使用--squash选项最根本的标准是,待合并分支上的历史是否有意义。
如果在开发分支上提交非常随意,甚至写成微博体,那么一定要使用--squash选项。版本历史记录的应该是代码的发展,而不是开发者在编码时的活动。

补充:

合并(merge)与变基(rebase) :

  • 合并方法更简单,更容易理解。但是很多时候我们更需要的是rebase,我们也可以通过设置,设置rebase为pull时候默认执行的动作:
git config --global pull.rebase true
  • rebase 不会尝试确定要保留或不保留哪些文件。我们执行 rebase 的分支总是含有我们想要保留的最新近的修改!这样我们不会遇到任何合并冲突,而且可以保留一个漂亮的、线性的 Git 历史记录。

git push 与 git push origin 的区别:

  • git push 只能将当前分支推送到对应的远程分支(即在A分支下只能推送A分支),并且必须得存在对应的远程分支,不存在不会自动创建
  • git push origin 能推送指定分支到对应的远程分支(即可以在A分支下推送B分支),并且不必一定得存在对应的远程分支,如果不存在对应的远程分支,git会自动进行创建

git checkout -- file 撤销修改

(命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。)

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用 git add 把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用 git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支。

git resotre --staged <file> === git reset HEAD <file>

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