标签: rebase

我可以在不修改我的工作副本的情况下重新绑定Git分支吗?

假设我检查了我的"主"分支.我已经对"master"进行了一些生产更改,现在我想将我的"实验"分支改为最新的master.但是,我想在不修改工作副本中的任何文件的情况下执行此操作.从本质上讲,我希望所有的魔法都发生在.git目录中,而不需要触及工作副本.

如果不是"不要修改我的工作副本"要求,这只是一个问题:

# current branch is master
git checkout experimental
git rebase master
git checkout master
Run Code Online (Sandbox Code Playgroud)

我真正的问题是,这会修改我的工作副本中的时间戳,即使我通过查看与我开始的完全相同的内容结束.一旦我运行"git checkout experimental",任何包含实验分支中的更改的文件都会将其mtime设置为当前时间 - 因此,自上次重新实验以来,在master中更改的所有文件也是如此.因为mtimes已经改变了,所以像构建工具这样的东西会让人觉得他们需要再做一些工作,即使在我完成时,文件的内容实际上并没有改变.(就我而言,如果项目文件的时间戳发生变化,Visual Studio认为需要花费大量时间来卸载和重新加载项目.)我想避免这种情况.

有没有办法一步完成上述所有操作,而无需修改工作副本中的任何内容 (假设在rebase期间没有冲突)

(如果冲突,我更倾向于将显示该错误,然后中止整个操作,而不用修改任何时间戳但是,这只是我的偏好,而不是硬性要求-我不知道什么是一切皆有可能.)

当然我可以编写一个脚本来捕获mtimes,运行git,然后重置mtimes; 但似乎Git已经有办法在没有打扰工作副本的情况下执行rebase这样的事情,因为rebase实际上是关于增量,而不是文件的实际内容.

git rebase

58
推荐指数
4
解决办法
1万
查看次数

Git:如何一次变换多个分支(使用相同的基本提交)?

我的项目中有一个主分支,用于从其他人那里获取更改.从那时起,我通常有几个主题分支,我正在工作.

我的问题是:有没有办法让我将新的更改添加到我的主人中,然后立即将所有主题分支重新绑定到该主题上?

情况就是这样:

        D--E topic1
       /
A--B--C  master
       \
        F--G topic2
Run Code Online (Sandbox Code Playgroud)

我想用一个命令(H来自上游)完成这个任务:

               D'--E' topic1
              /
    A--B--C--H  master
              \
               F'--G' topic2

现在,我知道我可以通过将topic1和topic2重新设置为master来实现这一目标,我甚至可以编写一个脚本来自动执行此操作.但是,如果我有其他几个分支,创建新分支并经常删除其他分支并且我一直收到上游变更怎么办?

当手动完成时,这个操作(几个rebase)既累人又容易出错.

有没有更简单的方法?

谢谢!

git rebase git-rebase

57
推荐指数
2
解决办法
2万
查看次数

如何将一些变更集移动到mercurial中的新分支

我想将变更集从一个分支移动到另一个分支.基本上,我目前有:

A -> B -> C -> D # default branch
Run Code Online (Sandbox Code Playgroud)

而且我要:

A # default branch
 \-> B -> C -> D # some_new_branch
Run Code Online (Sandbox Code Playgroud)

其中some_new_branch尚不存在.我习惯了git,所以我想我错过了一种简单的"mercurial"方式.

mercurial branch rebase

56
推荐指数
4
解决办法
2万
查看次数

如何将一个Git存储库重新绑定到另一个存储库?

我有一个Git存储库(A),它包含项目的开发直到某一点.然后我丢失了这个回购A打开的USB记忆棒.幸运的是,我有一个最新提交的备份,所以我可以稍后创建一个新的存储库(B),我导入最新项目的状态并继续开发.现在我恢复了丢失的USB记忆棒,所以我有两个Git存储库.

我想我不得不以某种方式将回购B重新命名为回购A,但我不知道如何做到这一点,也许使用fetch/pull和rebase?

git merge repository rebase

55
推荐指数
3
解决办法
2万
查看次数

使用源树,带冲突的rebase,在冲突重新调整后,rebase不起作用

我在Windows上使用SourceTree作为我的git工具.

我有一个分支和一个功能分支,当我发生冲突时,我无法让SourceTree执行rebase.

主要看起来像:

c1 - > c2 - > c4 - > c5

功能看起来像:

c1-> c2 - > c3

我想重新定义功能,所以它将是:

c1 - > c2-> c4-> c5-> c3

c3c5之间存在冲突.我可以解决冲突,但是当我提交更改时,我得到一个HEAD标记并查看我的图表,我可以看到该功能分支没有重新定位.

我怎样才能让rebase工作?

git rebase merge-conflict-resolution atlassian-sourcetree

54
推荐指数
2
解决办法
2万
查看次数

使用git rebase编辑合并提交

在我提交的Git中,例如.A - B - C我想编辑B提交,我

  • git rebase -i <A-commit-hash>,
  • 在列表中我editBcommit 前写命令,
  • B提交后,git rebase会立即停止,因此我可以修复任何我想要的东西git commit --amend,
  • 然后我继续使用git rebase --continue.

据我所知,这是如何做到这一点的最佳实践.使用这种方法,我可以编辑过去的任何提交(只要它还没有被推送到远程分支),而且使用-p标志我甚至可以保留合并.这太棒了.

我目前的问题是:我在合并提交中的一行上做了一个错误(拼写错误)(当合并两个分支时解决冲突).

我想解决它,但我不知道如何git rebase停止合并提交.该git rebase -p -i <blah>列表忽略了合并提交,所以我不能edit在它前面写命令并git rebase停在那里让我编辑它.

有什么帮助吗?我只想在合并提交中修复此行,同时保留它之后的所有提交(和合并).

谢谢.

git rebase

53
推荐指数
2
解决办法
2万
查看次数

在smartgit中重新定位"git-am正在进行中"

我会尝试解释我遇到的问题.我多次使用rebasegit bash选项.现在我有SmartGit,不知道为什么rebase不正确.

步骤1:

第2步:

第3步:

结果是HEAD分离.

git rebase git-rebase smartgit

53
推荐指数
2
解决办法
4万
查看次数

git rebase interactive:squash merge提交在一起

我希望有一个简单的解决方案,可以在交互式rebase期间将两个合并提交压缩在一起.

我的存储库看起来像:

   X --- Y --------- M1 -------- M2 (my-feature)
  /                 /           /
 /                 /           /
a --- b --- c --- d --- e --- f (stable)
Run Code Online (Sandbox Code Playgroud)

也就是说,我有一个my-feature最近合并过两次的分支,中间没有真正的提交.我不只是想重新定义my-feature分支,因为它是它自己的已发布分支,我只想将最后两个合并提交压缩成一个(还没有发布那些提交)

   X --- Y ---- M (my-feature)
  /            /
 /            /
a --- ... -- f (stable)
Run Code Online (Sandbox Code Playgroud)

我试过了:

git rebase -p -i M1^
Run Code Online (Sandbox Code Playgroud)

但我得到了:

Refusing to squash a merge: M2
Run Code Online (Sandbox Code Playgroud)

我最后做的是:

git checkout my-feature
git reset --soft HEAD^  # remove the last commit (M2) but keep the changes …
Run Code Online (Sandbox Code Playgroud)

git merge interactive rebase squash

52
推荐指数
3
解决办法
3万
查看次数

删除/修改冲突后,Git rebase不会继续

我正处于我的主人对舞台分支的重新考虑之中

git checkout stage
git rebase master
Run Code Online (Sandbox Code Playgroud)

有时我删除了两个文件,然后根据GIT修改了两个文件.

warning: too many files, skipping inexact rename detection
CONFLICT (delete/modify): test-recommendation-result.php deleted in HEAD and modified in [Bug] Fix test recommender. Version [Bug] Fix test recommender of test-recommendation-result.php left in tree.
CONFLICT (delete/modify): test-recommendation.php deleted in HEAD and modified in [Bug] Fix test recommender. Version [Bug] Fix test recommender of test-recommendation.php left in tree.
Failed to merge in the changes.
Patch failed at 0015.
Run Code Online (Sandbox Code Playgroud)

我想说"是的git,继续并删除那些文件"所以....

git rm test-recommendation-result.php
git rm test-recommendation.php
git …
Run Code Online (Sandbox Code Playgroud)

git version-control rebase git-rebase

52
推荐指数
1
解决办法
3万
查看次数

如何在git中备份私有分支

我有一个本地分支,用于git中的日常开发工作.我的工作流程是:

  1. 在local_branch上做一些事情,提交
  2. 获取origin/master
  3. 重新定位local_branch以赶上来自origin/master的新东西

这一切都运行正常,但我遇到的大多数建议都说不应该"推"私人分支,定期执行rebase.

这里的问题是,在这种情况下,本地分支不会备份到服务器,保存工作的唯一方法是将其合并回"pushable"分支(即origin/master)

在这种情况下,您对工作流程的建议是什么?

谢谢!

更新:我意识到我有一个原始要求(避免使用外部实用程序)是不必要的限制.

我目前的解决方案是将所有存储库存储在云同步文件夹中 - 这样我就可以免费获得备份.

git merge workflow rebase dropbox

48
推荐指数
3
解决办法
2万
查看次数