git中的rebase用法小结

今天用到了git rebase命令来进行合并两次提交,顺带梳理下rebase命令的用法; 参考:https://www.jianshu.com/p/4a8f4af4e803 rebase在git中是一个非常有魅力的命令,使用得当会极大提高自己的工作效率;相反,如果乱用,会给团队中其他人带来麻烦。它的作用简要概括为:可以对某一段线性提交历史进行编辑、删除、复制、粘贴;因此,合理使用rebase命令可以使我们的提交历史干净、简洁! 前提:不要通过rebase对任何已经提交到公共仓库中的commit进行修改(你自己一个人玩的分支除外); 一、合并多个commit为一个完整commit 当我们在本地仓库中提交了多次,在我们把本地提交push到公共仓库中之前,为了让提交记录更简洁明了,我们希望把如下分支B、C、D三个提交记录合并为一个完整的提交,然后再push到公共仓库。 现在我们在测试分支上添加了四次提交,我们的目标是把最后三个提交合并为一个提交: 这里我们使用命令: git rebase -i [startpoint] [endpoint] 其中-i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。 在查看到了log日志后,我们运行以下命令: git rebase -i 36224db 或: git rebase -i HEAD~3 然后我们会看到如下界面: 上面未被注释的部分列出的是我们本次rebase操作包含的所有提交,下面注释部分是git为我们提供的命令说明。每一个commit id 前面的pick表示指令类型,git 为我们提供了以下几个命令: pick:保留该commit(缩写:p) reword:保留该commit,但我需要修改该commit的注释(缩写:r) edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e) squash:将该commit和前一个commit合并(缩写:s) fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f) exec:执行shell命令(缩写:x) drop:我要丢弃该commit(缩写:d) 根据我们的需求,我们将commit内容编辑如下: 然后是注释修改界面: 编辑完保存即可完成commit的合并了: 二、将某一段commit粘贴到另一个分支上 当我们项目中存在多个分支,有时候我们需要将某一个分支中的一段提交同时应用到其他分支中,就像下图: 我们希望将develop分支中的C~E部分复制到master分支中,这时我们就可以通过rebase命令来实现(如果只是复制某一两个提交到其他分支,建议使用更简单的命令:git cherry-pick)。 在实际模拟中,我们创建了master和develop两个分支: master分支: develop分支: 我们使用命令的形式为: git rebase [startpoint] [endpoint] --onto [branchName] 其中,[startpoint] [endpoint]仍然和上一个命令一样指定了一个编辑区间(前开后闭),--onto的意思是要将该指定的提交复制到哪个分支上。 所以,在找到C(90bc0045b)和E(5de0da9f2)的提交id后,我们运行以下命令: git rebase 90bc0045b^ 5de0da9f2 --onto master 注:因为[startpoint] [endpoint]指定的是一个前开后闭的区间,为了让这个区间包含C提交,我们将区间起始点向后退了一步。 ...

February 22, 2023 · 1 min · Rancho

如何写好CommitMessage

翻译的一篇文章; Commit messages matter. Here’s how to write them well. 提交的备注信息很重要,这里将教给你如何写好它们. 简介:为什么好的提交信息很重要 如果你随机浏览任何一个 Git 存储库的日志,你可能会发现它的提交消息或多或少是一团糟。 例如,下面是我早期致力于 Spring 时的提交信息: $ git log --oneline -5 --author cbeams --before "Fri Mar 26 2009" e5f4b49 Re-adding ConfigurationPostProcessorTests after its brief removal in r814. @Ignore-ing the testCglibClassesAreLoadedJustInTimeForEnhancement() method as it turns out this was one of the culprits in the recent build breakage. The classloader hacking causes subtle downstream effects, breaking unrelated tests. The test method is still useful, but should only be run on a manual basis to ensure CGLIB is not prematurely classloaded, and should not be run as part of the automated build. 2db0f12 fixed two build-breaking issues: + reverted ClassMetadataReadingVisitor to revision 794 + eliminated ConfigurationPostProcessorTests until further investigation determines why it causes downstream tests to fail (such as the seemingly unrelated ClassPathXmlApplicationContextTests) 147709f Tweaks to package-info.java files 22b25e0 Consolidated Util and MutableAnnotationUtils classes into existing AsmUtils 7f96f57 polishing 啊哈,然后将其与来自同一存储库的这些最近的提交进行比较: ...

February 18, 2023 · 5 min · Rancho

git常用命令

最近在做FOC项目的时候,用到了GIT中的分支功能,因而再复习一下GIT的用法,在此记录一下GIT常用命令; 为表简洁,我就直接给出具体的命令以及简短的注释和自己对此的理解; 1、git init 用于初始化git仓库; 2、git add +文件名 将指定工作区文件提交到git暂存区; -A,是添加文件夹内的所有文件到暂存区; 每次提交,都要git add加入到暂存区,然后再commit提交; 第一次修改 -> git add -> 第二次修改 -> git add -> git commit; commit提交的是git add 加入的修改的内容,而不是文件当前的内容; 3、git commit -m +“本次提交的说明” 将暂存区文件提交到仓库; -m,后边是关于本次提交的说明; 该命令执行成功后会显示提交的内容: 例如: 1 file changed:1个文件被改动; 2 insertions:插入了两行内容; 4、git status 显示当前仓库的状态(被修改的文件是否被提交); 例如某个文件被修改却未被提交; 包括工作区的文件修改情况和暂存区的文件修改情况; 5、git diff +文件名 查看文件修改内容; 常看尚未被提交的文件做了什么修改; 是工作区和暂存区文件之间的差别; 6、git log 显示从近到远的提交日志; 7、git reset —hard HEAD^ 回退到上一版本; HEAD 当前版本 HEAD^ 上一版本 HEAD^^ 上上一版本 8、git reset —hard 1094a 回退或者前进到指定版本; —hard,后边的是版本号前几位; ...

September 28, 2022 · 4 min · Rancho

Git学习记录

Git相关的知识; 参考链接:https://zhuanlan.zhihu.com/p/94008510 Git 常用命令 初次使用时,在命令行中配置本地仓库的账号和邮箱: $ git config --global user.name "username" $ git config --global user.email "useremail" 初始化Git,使用 cd 命令导航到要在终端中设置版本控制的目录,现在你可以像这样初始化 Git 存储库: git init 要开始对现有文件进行版本控制,你应该先跟踪这些文件并进行初始提交。要做到这一点,你首先需要将文件添加到 Git 中,并将它们附加到 Git 项目中。 git add git commit -m "first commit" 还有一些更高级的方法可以将文件添加到 Git 中,从而使你的工作流程更高效。我们可以执行以下操作,而不是试图查找所有有更改的文件并逐个添加它们: # 逐个添加文件 git add filename # 添加当前目录中的所有文件 git add -A # 添加当前目录中的所有文件更改 git add . # 选择要添加的更改(你可以 Y 或 N 完成所有更改) git add -p 远程备份文件(Github),因此,首先转到 http://github.com 并创建一个存储库。然后,使用存储库的链接将其添加为本地 git 项目的来源,即该代码的存储位置; git remote add origin \ https://github.com/fan-pengfei/bash_learning.git 远程备份代码: ...

August 18, 2021 · 3 min · Rancho