思考:
git merge 与 git rebase 的区别是?
- rebase会合并该分支与其他分支的commit history,可能会得到一个新的commit history
- rebase得到更简洁的项目历史,去掉了merge commi,如果合并出现代码问题不容易定位,因为re-write了commit history
- merge会创建新的commit,包括每个分支的commit 详情
- 每次merge会自动产生一个merge commit,特别是commit比较频繁时,看到分支很杂乱。
- 想要得到一个干净的,没有merge commit的线性commit历史记录,选择git rebase
- 想要得到一个完整的commit历史记录,且想避重写commit历史记录的风险,选择git merge
git reset 与 git rebase的区别?
- git revert会生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留,也就是说对于项目的版本历史来说是往前走的。
- git reset 则是回到某次提交,类似于穿越时空。
实践操作
-
获取Git仓库
- 现有文件目录使用
git init初始化仓库 - 从远程服务器上克隆
git clone一个仓库
- 现有文件目录使用
-
合并其它分支的代码
- git merge
- git rebase
-
撤销合并merge/rebase
git reset --hard [commit]工作区、暂存区撤回到制定的commit版本git reset --merge [commit]或者git reset --merge HEAD^撤回到合并前的commit
-
修改某次的commit
git commit -amend -m 'comment'替换上一次的commitgit rebase -i HEAD~[数字n]进入vim编辑器,并显示最近n条最新的commit记录
-
撤销某次的commit
-
git revert HEAD产生新一次commit来抵消上一次提交 -
git revert commit_id撤销中间某次commit -
git revert -m commit_id撤销其他分支合过来的commit -
git revert --no-commit commit1..commit5撤销commit1(不包括)至commit5之间的连续commitgit revert的参数:
--no-edit:执行时不打开默认编辑器,直接使用 Git 自动生成的提交信息。
--no-commit:只抵消暂存区和工作区的文件变化,不产生新的提交。
-
-
丢弃某次commit
git reset [last good SHA]丢弃掉某个提交之后的所有提交,在提交历史中彻底消失git reset --hard [last good SHA]--hard参数可以让工作区里面的文件也回到以前的状态
-
查看提交历史记录
- git log 时光机,查看refs的HEAD的指向变动
-
查看文件的改动
git diff对比工作区与暂存区的同文件, 未添加至暂存区的文件改动git diff --staged/cached查看添加至暂存区所有文件的内容修改git stage显示工作目录和暂存区的状态
-
暂存文件的改动
git stash临时保存和恢复工作区文件的改动
-
撤销文件的改动
git checkout -- [filename]
-
撤销暂存区的文件
-
git rm --cache [filename]
-
文章详细介绍了gitmerge和gitrebase在合并分支时的不同,以及它们与gitreset在撤销提交时的区别。gitmerge创建合并提交,保留完整历史,而gitrebase重新构造提交历史,使历史更简洁。gitreset则可以回退到指定提交状态,包括硬重置和混合重置。此外,文章还提到了gitrevert用于撤销提交的方式以及查看和管理提交历史的命令。
4191

被折叠的 条评论
为什么被折叠?



