我分叉了一个github仓库,并在我的github仓库上工作.
我已经提出拉动请求并且已经完成.
在那之后上游有更多的提交,所以现在我想要改变,我想这就是我必须要做的.
但我得到了这些合并冲突:
First, rewinding head to replay your work on top of it...
Applying: Issue 135 homepage refresh
Using index info to reconstruct a base tree...
<stdin>:17: trailing whitespace.
%h4
warning: 1 line adds whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging app/views/layouts/application.html.haml
CONFLICT (content): Merge conflict in app/views/layouts/application.html.haml
Auto-merging app/views/home/index.html.haml
CONFLICT (content): Merge conflict in app/views/home/index.html.haml
Auto-merging app/views/home/_group_projects.html.haml
CONFLICT (content): Merge conflict in app/views/home/_group_projects.html.haml
Failed to merge in the changes.
Patch failed at 0001 …Run Code Online (Sandbox Code Playgroud) 我曾经git init创建一个新的回购,然后做了三次提交.现在我想改变回去修改我的第一次提交,但如果我这样做git rebase -i HEAD~3抱怨!如果我尝试相同HEAD~2然后它有点工作,但只允许我重新排列最后两个提交.
如何在有任何提交之前引用'commit'或者返回并插入空提交?
我正在尝试编写rebase脚本,我的脚本将采用不同的路径,具体取决于rebase是否会导致任何冲突.
有没有办法在执行rebase之前确定rebase是否会导致冲突?
我正在尝试学习在Git 1.7.11中添加的新git-subtree命令.添加子树后,我似乎失去了变基的能力.我有一个带有README文件的主存储库和一个库存储库,它也有一个README文件.我将它添加到lib目录subtree add:
$ git subtree add -P lib/mylib myliborigin master
Run Code Online (Sandbox Code Playgroud)
这很好,但现在历史看起来像这样:
* 22c1fe6 (HEAD, master) Merge commit 'b6e698d9f4985825efa06dfdd7bba8d2930cd40e' as 'lib/mylib' -
|\
| * b6e698d Squashed 'lib/mylib/' content from commit d7dbd3d
* b99d55b Add readme
* 020e372 Initial
Run Code Online (Sandbox Code Playgroud)
现在当我想要反对我的repo origin/master并且它失败时因为squash commit直接应用于它不适用的父提交,因为它被应用于repo的根而不是我添加的时候给它的前缀子树.
如果我看一下壁球提交,原因很清楚.没有关于前缀的信息.这只是原始的mylib提交压扁在一起.只有下一个合并提交知道它的任何内容,但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)既累人又容易出错.
有没有更简单的方法?
谢谢!
我不明白之间的差别git rebase origin和git rebase origin/master.在我的情况下,我克隆了两次git存储库.在git rebase origin我必须使用的第一个克隆中,我必须使用另一个克隆git rebase origin/master.
我会尝试解释我遇到的问题.我多次使用rebasegit bash选项.现在我有SmartGit,不知道为什么rebase不正确.
步骤1:

第2步:

第3步:

结果是HEAD分离.
我正处于我的主人对舞台分支的重新考虑之中
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 master,修复了文件中报告的冲突,然后git add解决了冲突文件.然后我做了git rebase --continue,并得到了这个:
应用:固定单元测试
没有变化 - 你忘了使用'git add'吗?如果没有任何东西可以上台,那么其他东西可能已经引入了相同的变化; 你可能想跳过这个补丁.
解决此问题后,运行"git rebase --continue".如果您想跳过此补丁,请改为运行"git rebase --skip".要检出原始分支并停止重新定位,请运行"git rebase --abort".
知道我在这里缺少什么吗?我应该做git rebase --skip吗?
根据我的阅读,它们都有助于我们获得线性历史.
根据我的实验,rebase一直在工作.但是merge -ff-only仅适用于可以快速转发的场景.
我也注意到,git merge创建了一个合并提交,但如果我们使用--ff-only,它会给出一个线性历史,它基本上等于git rebasing.所以--ff-only杀了git merge的目的,对吧?
那么它们之间的实际区别是什么?