草庐IT

rebase-apply

全部标签

git - 为什么 cherry-pick 之后的 rebase 不会两次应用相同的提交?

当您从一个分支(比如“主题”)挑选一个提交到另一个分支(我们称之为“主”)时,该提交的历史记录被重写,它的哈希值发生变化,它实际上变成了一个新的、独立的提交。然而,当您随后根据主git对主题进行rebase时,git足够聪明,知道不要对提交应用两次。例子:A---B这个魔法是如何运作的?IE。git如何知道它应该将C应用到D',而不是D应用到D'? 最佳答案 答案在git-rebase的手册页中:NotethatanycommitsinHEADwhichintroducethesametextualchangesasacommiti

Git:由于未提交的更改而无法 rebase

Git不允许我从任何地方rebase。Cannotrebase:Yourindexcontainsuncommittedchanges.Pleasecommitorstashthem.按照thisanswer中的说明进行操作:$gitupdate-index-q--ignore-submodules--refresh$gitdiff-files--ignore-submodules两者都不产生任何输出,但那个产生:$gitdiff-index--cached--ignore-submodulesHEAD--:100644000000cab819f1e5ed6cc7cff374eecae

Git stash apply 和 drop

是否有一个git命令既可以应用存储又可以删除它?这是一个命令:gitstashapplygitstashdrop 最佳答案 你想要gitstashpop!pop[--index][-q|--quiet][]Removeasinglestashedstatefromthestashlistandapplyitontopofthecurrentworkingtreestate,i.e.,dotheinverseoperationofgitstashsave.Theworkingdirectorymustmatchtheindex.

git - 比较 Git 中 rebase 的差异

假设我刚刚将分支foo重新设置为master的基础,但有冲突。我想确保我没有在冲突解决期间通过引入额外更改或丢失更改(除了适合冲突解决的内容之外)而意外损坏foo的内容。我通过以下方式完成了此操作:diff-u(更新:或我刚刚被提醒的git-diff的等效...语法:)diff-u这向我展示了master..foo发生的所有更改,这些更改被视为补丁,这正是我想要检查的最小值。然而,调用很复杂,输出也不是完全易于解释的。有没有更好的方法来完成这项任务——提供相同的信息,但使用更好的方法或格式——还是我应该把上面的内容放在脚本中? 最佳答案

ruby-on-rails-3 - rebase 时 Gemfile.lock 中的冲突

在Git中rebase时人们有什么策略来解决Gemfile.lock冲突?我在最近的一个项目中不得不做很多这件事,这不仅很乏味,而且并不总是很清楚如何进行merge。 最佳答案 您可以在每次merge时重新锁定它,通过merge驱动程序(我通常使用它来alwayskeepthelocalversionofafileduringamerge)。请参阅AutoMergeGemfile.lock中的“WillLeinweber”:Allyouhavetodoisrunbundlelock(obsoleteinRail3)bundleins

git - 带有交互模式的“git stash apply”

我有一系列文件存储在(stash{0})中,我想gitapply只是一些部分/这些文件的大块(通常称为交互模式)。这可能吗?我已经看到可以执行一个gitstashsave-p'Stashname'但好像做不到gitstashapply-p'Stashname'你知道实现它的方法吗? 最佳答案 Isitpossible?是的!gitcheckout-pstash@{0}您可以将stash@{0}中的0替换为您要应用的存储的索引。如果不确定哪个n是您要应用的存储,请使用gitstashlist和gitshow-pstash@{n}。不要

git pull --rebase 与 git rebase : what's the danger?

我不明白gitpull--rebase和gitrebase之间的区别,没有任何其他选项。我不明白它们是安全的、好的做法还是非常危险。我可以通过在本地执行gitpull--rebase来打破提交历史吗? 最佳答案 我完全不推荐rebase,只推荐私有(private)分支。我所说的私有(private)是指您非常确定只有您pull的分支。rebase将分支的起点更改为某个较新的提交,从而将所有提交merge到该点。这可能会导致与在其存储库中拥有旧分支基础的人员发生merge冲突。我建议始终采用纯merge,仅在某些情况下(例如功能分支

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--