You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
//7. 就会出问题了,我们来看看问题的本源$gitrebase-iee0e1b
error: cannot'squash'withoutapreviouscommitYoucanfixthiswith'git rebase --edit-todo'andthenrun'git rebase --continue'.Oryoucanaborttherebasewith'git rebase --abort'.
看提示是without a previous commit 没有一个先前的提交,我们使用s的时候和合并到先前的提交,而我们进入交互模式-i的时候,commit 2之前确实没有可以插入的commit
git的高级小知识
基础知识
我们知道git一般把区域分为四个部分,通过不同的命令可以完成每一个区域的切换。对于这四种区域,内心一定要清楚的记住。
版本知识
版本知识
一般
HEAD
表示当前版本:HEAD^ 表示上一个版本,HEAD^^上上个版本,HEAD~100往上100个版本
。当前版本记录
历史版本记录
1. 检查修改
我们在工作中经常需要对比2个文件的区别,方便我们知道修改的地方。
已修改,未暂存
假如我们现在有一个文件a.md,它里面的内容是This is a, 已经被提交到本地仓库过或者已经存放在暂存区过,现在我们需要给a.md添加字段update a,但是还没有提交到暂存区。通过
git diff a.md
来判定文件的修改内容。已暂存,未提交
我们在创建一个b.md,它里面的内容是This is b, 已经被提交过本地仓库一次,现在我们需要给b.md添加字段update b,但是还已经提交到暂存区。通过
git diff --cached b.md
来判定文件的修改内容。已提交,未推送
我们在创建一个c.md,它里面的内容是This is c, 已经被提交过远程仓库一次,现在我们需要给c.md添加字段update c,但是还已经提交到本地仓库。通过
git diff <branch> <origin/branch>
来判定文件的修改内容。对比2个版本的指定文件
我们刚刚创建了一个d.md提交到本地仓库,然后更新了它的内容,也提交到本地仓库,想对比本次提交和上一次提交d.md的内容差别。
总结:
2. 撤销修改
人生谁不犯一点错误,但是git给我们修改错误的机会,这样就可以让你的年终奖不至于因为你的疏忽而没有。
已修改,未暂存
我们已经有一个a.md,它里面的内容是This is a, 我们无意中添加了add 1这样的字段,但是又没有用处,想撤销添加的add 1,并且还没有放入暂存区。
已暂存,未提交
我们已经有一个a.md,它里面的内容是This is a, 我们无意中添加了add 2这样的字段,但是又没有用处,想撤销添加的add 1,并且还已经放入暂存区。
已提交,未推送
我们已经有一个a.md,它里面的内容是This is a, 我们无意中添加了add 3这样的字段,但是又没有用处,想撤销添加的add 1,并且还已经提交到本地仓库了。
撤销到指定版本
撤销到指定版本后,还想回到之前的某一个版本
我刚刚撤销到c.md后后悔了,应该倒退到它的上2个版本的,现在怎么办呢?通过
git log
又查询不到,愁死我了,这个时候救命天子git reflog
登上历史舞台。上面的记录清晰的告诉我们,我们刚刚退回到了
3c7280b
,也可以看到它的上2个版本是8f06228
update c.md3. 合并多条commit
-i
实际上就是--interactive
的简写,在使用git rebase -i
时,我们要在后面再添加一个参数,这个参数应该是 最新的一个想保留的 Commit,就是不会合并的commit。有的时候开发项目的一个小功能,我们没完成一部分都会
git commit
,等到工程完成后,就会出现很多commit,这样不方便管理和查看功能,怎么才能合并多个commit呢?可能会遇到的问题
人生都不是一帆风顺的,在你合并的时候可能会遇到一些问题,例如下面的:
我们在把之前的合并退回来
看提示是
without a previous commit
没有一个先前的提交,我们使用s
的时候和合并到先前的提交,而我们进入交互模式-i
的时候,commit 2
之前确实没有可以插入的commit
解决
测试
我们测试一下我们的猜想正不正确?
4. 分支管理
我们在正式的项目中,往往是分为以下几个分支
master
分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;那在哪干活呢?干活都在
dev
分支上,也就是说,dev
分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev
分支合并到master
上,在master
分支发布1.0版本;你和你的小伙伴们每个人都在
dev
分支上干活,每个人都有自己的分支,时不时地往dev
分支上合并就可以了。修复一个小bug
已经发布到线上的项目,老板突然说,线上这个字写错了,我们需要立马的修改过来,停下手里的开发工作,那应该怎么做呢?
从develop切换到master,然后拉去远程代码
从master开出一个新的分支bug
然后在bug上面修改错误,修改完成后合并到master分支上面
完成bug后删除开的分支
5. 修改commit的内容
修改最新的一条commit
修改其他的commit
6. git cherry-pick(也很重要)
参考链接(篇幅有限,但是很重要)
Git笔记(三)——[cherry-pick, merge, rebase]
7. git小知识
参考链接
git如何修改已提交的commit
如何优雅地合并多个 Commit
廖雪峰的git教程
如何彻底删除 Git 中的提交
The text was updated successfully, but these errors were encountered: