草庐IT

git - 如何一次 rebase 多个分支?

我目前正在从事一个使用SVN作为存储库的项目。在本地,我用我不想提交给repo的代码做了几个“实验”。因此,我在SVN工作目录之上本地使用git,并使用多个分支进行不同的“实验”。所以它看起来例如像这样。C0----C7(master)\\----C1----C2----C4(exp1)\\\\\\----C3(exp2)\\\\----C5(exp3)\\----C6(exp4)在分支master上,我想要未受污染的SVNrepo,即C0是SVNRepoRevisionx,C7是SVNRepoRevisionx+n。是否可以通过某种方式轻松地将所有exp分支立即rebase到C7上,

git rebase --continue 和 --stepback?

有没有办法在交互式rebase期间退回提交? 最佳答案 是的。如何在交互式rebase期间后退:获取当前HEAD的提交哈希,例如gitrev-parseHEAD运行gitrebase--edit-todo将带有该散列的选择插入到该文件的顶部pick运行gitreset--hardHEAD^(这是一个硬重置,所以如果你做了任何你想保留的事情,请确保在运行命令之前将其存储在某个地方,例如gitstash)现在你仍然在rebase中,但是一次提交回来,你可以自由地继续rebasegitrebase--continue.如果您不希望未编辑的

git - 如何将 Git 的交互式 rebase 与仅限本地的存储库(无远程/源)一起使用?

我将git用作本地源代码控制系统,主要用于历史记录和差异跟踪。我仍然想使用rebase对我将定期进行的WIP提交进行修复/压缩。但是,当我尝试执行gitrebase-i时,我得到以下信息:Thereisnotrackinginformationforthecurrentbranch.Pleasespecifywhichbranchyouwanttorebaseagainst.Seegit-rebase(1)fordetailsgitrebaseIfyouwishtosettrackinginformationforthisbranchyoucandosowith:gitbranch--

git - 如何避免 git rebase 杀死 merge 提交?

给定以下git历史:C-Iorigin/master/A-B-F-G-Hmaster\/D-Ebranch-b我想将我的本地master分支rebase到origin/master之上,但我想保留merge提交G。当我尝试在master上简单地执行gitrebaseorigin/master时,它将D..E压缩为G并使用E的提交消息提交,因此merge的历史记录丢失了。有没有办法在仍然获得rebase的同时保留此merge?为清楚起见,我的预期结果是:A-B-C-I-F-G-Hmaster\/D-----Ebranch-b 最佳答案

git - 从 rebase 期间的无意跳过中恢复

我只是试图将一个非常古老的分支rebase,对我的主分支进行一些小的修改。只merge涉及的三个文件中的一个就出现了问题,所以我不假思索地做了一个--skip,以为它会跳过那个文件,但碰巧的是,它似乎跳过了我所有的更改,并向前滚动。所以现在rebase完成了,我的更改似乎已经消失了。我看到了关于undoingrebase的问题,但这对我来说都是希腊语,我看到了reflog,但我不知道在rebase之前分支附加到哪个提交。无论如何,我真的不需要撤销rebase,我只是希望能够恢复这两个文件的变化。无论如何都可以正确地做到这一点(如果做不到这一点,我只需要恢复昨天的存储库备份并手动挑选出来

git - 我如何 git rebase 第一次提交?

我使用gitinit创建了一个新的repo,然后进行了三次提交。现在我想rebase以返回并修改我的第一次提交,但是如果我执行gitrebase-iHEAD~3它会显示错误-fatal:invalidupstream'HEAD~3'!如果我对HEAD~2进行同样的尝试,那么它可以工作,但只能让我重新安排最后两次提交。如何引用“在有任何提交之前提交”或返回并插入一个空提交?gitrebase-iHEAD~3错误:fatal:invalidupstream'HEAD~3' 最佳答案 最简单的方法,使用足够新的Git(它已经发布很长时间了

git - 如何以非交互方式运行 git rebase --interactive?

是否可以执行以下操作?使gitrebase--interactive仅将标准样板文件输出到文件,而不是输出到文件并在编辑器中打开它。让用户编辑文件。让用户使用编辑后的文件名重新运行gitrebase。继续执行通常的rebase过程。用例:当然是脚本化rebase。参见howtore-ordercommitsinGitnon-interactively例如。 最佳答案 经过一些思考和研究,答案很简单:gitrebase-i从众所周知的EDITOR/VISUAL环境变量中获取编辑器名称,因此覆盖它以指向非交互式脚本即可完成工作。但是,E

git - git rebase 和 git merge --ff-only 之间有区别吗

从我读到的内容来看,它们都帮助我们获得了线性历史。根据我的实验,rebase一直有效。但是merge--ff-only只适用于可以快进的场景。我还注意到,gitmerge创建了一个merge提交,但是如果我们使用--ff-only,它会给出一个线性历史,基本上等于gitrebase。所以--ff-only扼杀了gitmerge的目的,对吧?那么它们之间的实际区别是什么? 最佳答案 请注意gitrebase与gitmerge的工作不同(有或没有--ff-only)。什么rebase所做的是获取现有的提交并复制它们。例如,假设您在bra

git - 如何从一开始就对所有提交进行 rebase

所以我要从svn(code.google.com)迁移到git(github)。我已经从svn存储库导入了我的项目,并且它一路导入了所有提交历史记录。我对这些评论并不感到自豪,因为这是我的第一个项目,不是很认真。我想将所有内容重新设置为单个“初始导入”提交。我已经把所有东西都pull到我的电脑上了,我正在努力做到这一点。但我发现的只是:gitrebase-imaster但它只会对新的修改和提交进行rebase。如何使用rebase从所有历史记录中清除我的github存储库? 最佳答案 gitrebase-i--root将从头开始对所

git - 为什么我必须一遍又一遍地解决相同的 "git rebase"冲突?

当我做gitrebasebranch1在我的branch1-local我有冲突。我解决了冲突,做gitadd然后做gitrebase--continue正如git要求我做的那样。之后应用新的提交。新的冲突出现了。但是在同一个文件中再次发生相同的冲突。我再做一次,gitadd,gitrebase--continue,然后这一切再次重复,直到我为每个重新提交的提交重复此操作。为什么rebase让我一遍又一遍地重做相同的冲突解决方案? 最佳答案 你想要的是gitrerere,它会为你记录冲突解决方案。我所见过的最好的介绍现在是GitBoo