假设我检查了我的"主"分支.我已经对"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实际上是关于增量,而不是文件的实际内容.
我的项目中有一个主分支,用于从其他人那里获取更改.从那时起,我通常有几个主题分支,我正在工作.
我的问题是:有没有办法让我将新的更改添加到我的主人中,然后立即将所有主题分支重新绑定到该主题上?
情况就是这样:
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)既累人又容易出错.
有没有更简单的方法?
谢谢!
我想将变更集从一个分支移动到另一个分支.基本上,我目前有:
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"方式.
我有一个Git存储库(A),它包含项目的开发直到某一点.然后我丢失了这个回购A打开的USB记忆棒.幸运的是,我有一个最新提交的备份,所以我可以稍后创建一个新的存储库(B),我导入最新项目的状态并继续开发.现在我恢复了丢失的USB记忆棒,所以我有两个Git存储库.
我想我不得不以某种方式将回购B重新命名为回购A,但我不知道如何做到这一点,也许使用fetch/pull和rebase?
我在Windows上使用SourceTree作为我的git工具.
我有一个主分支和一个功能分支,当我发生冲突时,我无法让SourceTree执行rebase.
主要看起来像:
c1 - > c2 - > c4 - > c5
功能看起来像:
c1-> c2 - > c3
我想重新定义功能,所以它将是:
c1 - > c2-> c4-> c5-> c3
c3和c5之间存在冲突.我可以解决冲突,但是当我提交更改时,我得到一个HEAD标记并查看我的图表,我可以看到该功能分支没有重新定位.
我怎样才能让rebase工作?
在我提交的Git中,例如.A - B - C
我想编辑B
提交,我
git rebase -i <A-commit-hash>
,edit
在B
commit 前写命令,B
提交后,git rebase会立即停止,因此我可以修复任何我想要的东西git commit --amend
,
git rebase --continue
.据我所知,这是如何做到这一点的最佳实践.使用这种方法,我可以编辑过去的任何提交(只要它还没有被推送到远程分支),而且使用-p
标志我甚至可以保留合并.这太棒了.
我目前的问题是:我在合并提交中的一行上做了一个错误(拼写错误)(当合并两个分支时解决冲突).
我想解决它,但我不知道如何git rebase
停止合并提交.该git rebase -p -i <blah>
列表忽略了合并提交,所以我不能edit
在它前面写命令并git rebase
停在那里让我编辑它.
有什么帮助吗?我只想在合并提交中修复此行,同时保留它之后的所有提交(和合并).
谢谢.
我会尝试解释我遇到的问题.我多次使用rebase
git bash选项.现在我有SmartGit,不知道为什么rebase
不正确.
步骤1:
第2步:
第3步:
结果是HEAD
分离.
我希望有一个简单的解决方案,可以在交互式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 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中的日常开发工作.我的工作流程是:
这一切都运行正常,但我遇到的大多数建议都说不应该"推"私人分支,定期执行rebase.
这里的问题是,在这种情况下,本地分支不会备份到服务器,保存工作的唯一方法是将其合并回"pushable"分支(即origin/master)
在这种情况下,您对工作流程的建议是什么?
谢谢!
更新:我意识到我有一个原始要求(避免使用外部实用程序)是不必要的限制.
我目前的解决方案是将所有存储库存储在云同步文件夹中 - 这样我就可以免费获得备份.
rebase ×10
git ×9
git-rebase ×3
merge ×3
branch ×1
dropbox ×1
interactive ×1
mercurial ×1
repository ×1
smartgit ×1
squash ×1
workflow ×1