在Git中重新定位时,人们有什么策略来解决Gemfile.lock冲突?
我不得不在最近的一个项目中做很多事情,而且不仅乏味,而且并不总是清楚如何进行合并.
我的分支是:
o---o support.2013.16
\
o---o---o---o---o master
\
o---o---o hotfix/A
Run Code Online (Sandbox Code Playgroud)
我需要复制hotfix/A来支持.2013.16.我知道采摘樱桃,但有可能做类似的事情
git rebase --onto support.2013.16 master hotfix/A
Run Code Online (Sandbox Code Playgroud)
但是没有移动分支而是复制它?
我试图改变一位同事的工作.
首先,我得到了大量的冲突,其中<<<<<头部接缝包含新代码.
然后过了一会儿我得到以下错误:
fatal: update_ref failed for ref 'refs/heads/dev_504':
cannot lock ref 'refs/heads/dev_504': ref refs/heads/dev_504 is at
XXXXXXX
but expected XXXXXXXX
Could not move back to refs/heads/dev_504
Run Code Online (Sandbox Code Playgroud)
然后,如果我尝试继续,我得到以下错误:
fatal: cannot resume: .git/rebase-apply/final-commit does not exist.
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题,以便rebase不会出错?
当我做了一个git svn rebase时,它停止了一点说:
Index mismatch: SHA key of a tree != SHA key of another tree. (我知道这些SHA键对应一棵树而不是上面两个sha键的git show提交.)
re-reading <sha index of a commit in svn/trunk>
... list of files ...
fatal: bad object <SHA1 index of the bad object>
rev-list -1 <SHA1 index of the bad object> --not <SHA1 index of the revision it was trying to re-read>: command returned error: 128
Run Code Online (Sandbox Code Playgroud)
我对git的内部工作方式不是很有经验,所以是否需要按照一系列步骤来剖析像这样的问题并可能解决它们?
我总是用git commit --verbose.是否有一个等效的选项/设置,当我在重写提交消息期间,git会让我看到差异git rebase --interactive?
对我们来说,一个常见的开发工作流程是checkout分支b,向它提交一堆,然后将所有这些提交压缩成一个(仍在b).
但是,在rebase -i压缩所有提交的过程中,经常会出现多个步骤的冲突.
我本质上希望将分支更改为一个提交,该提交表示最终提交时存储库的状态 b
我做了一些搜索,但我还没找到我正在寻找的东西.我不想,merge --squash因为我们想在合并之前测试压扁的功能分支.
我正在使用git开始一个项目,我将提交非常大的文件,但每周只有几次.我已经尝试使用git as-is,它似乎将整个文件存储在每次更改的提交中.这不适用于此项目,存储库将失去控制.所以,我想减少存储库的大小.
我的第一个想法是"简单地"删除所有比两周更早的提交,或者只保留例如历史上的五次提交(这可能更好:) :)我用谷歌搜索并阅读了很多来自The Git社区书籍我猜我会需要使用的git-rebase或git-filter-branch.事情是我似乎无法让它工作.
只是为了说明; 我有一个只有一个分支的历史H(主分支)
A - > B - > C - > D - > E.
我想删除一些以前的提交,使我的历史看起来像
C - > D - > E.
提交A和B应该完全清除.我已经尝试了git-rebase但它似乎将提交合并在一起而不是实际删除旧的,也许我不完全理解rebase是如何工作的.另一个想法是从.git/objects中删除所有内容然后使用以下内容构建新提交git-hash-object -w,git-mktree而且git-commit-tree,我还没有设法将这个"人造"树推送到服务器.
我不会与任何分支机构合作,因此不需要考虑这些因素.
我想知道的是,是否有人可以给我具体的用法,git-rebase如果这是我应该使用的?或者其他一些提示,我可以做的例子.
干杯!
编辑:
大文件不会始终是相同的大文件,有些文件将被新文件替换.我希望这些被替换的文件完全从历史中清除.
现在的情况:
origin/mybranch --- A1 --- B1 --- A2 --- B2 --- A3 --- B3 mybranch
Run Code Online (Sandbox Code Playgroud)
我想清理那段历史(A1到B3),尤其是 因为我还没有把它推到任何地方,因为我想准备一个只有那些B*的补丁.
我想要的是:
origin/mybranch --- A1+A2+A3 --- B1+B2+B3 mybranch
Run Code Online (Sandbox Code Playgroud)
我可能根本不会推动这个(或者如果我愿意的话,只有总和的B*,我必须删除A*提交)并且当我在这方面进一步工作时,我可能会得到额外的这样的提交,即像这样:
origin/mybranch --- A1+A2+A3 --- B1+B2+B3 --- A4 --- B4 mybranch
Run Code Online (Sandbox Code Playgroud)
我想再次像上面那样改写它.
我不只是想知道任何方法来做到这一点(因为我能够以某种有点hacky的方式得到某种方式),我,尤其是.在这里要求正确/最好/最干净/最简单的方法来做到这一点.
我在做什么esp.是:我正在处理官方的xorg-xserver-1.7分支,并希望准备一个补丁(B*).因为我希望能够用系统替换我的自编译的xserver以进行简单的测试,所以我已经应用了一堆Debian/Ubuntu补丁(A*).但是,当我要在某处发布该补丁时,我想排除这些.
我有2个本地分支叫做"开发"和"主人"; 他们是相似的.在我公司的服务器上有一个"主要"仓库(生产)和几个由其他开发商制造的分支机构:
$ git branch -a * develop master remotes/origin/HEAD -> origin/master remotes/origin/some-test remotes/origin/feature1 remotes/origin/feature2 remotes/origin/master
我怎么能合并remotes/origin/feature1,并remotes/origin/feature2进入我的地方"master"分支,复制所有到"发展",并开始在我的"开发"分支与实际代码的工作?
我可以使用不包含最新提交的rebase来压缩本地功能/主题分支的一系列提交吗?这是我想在合并并推送到公共回购之前准备的提交.
我正在快速地工作并用糟糕的标题和描述进行了一些小的改动,我想要将两个或三个单独的逻辑提交压缩成一个很好的评论.我可以选择329aed9和af39283之间的一系列提交,这些提交可能在此功能分支的短历史中的任何一点吗?
git rebase -i RANGE_START_COMMIT_ID RANGE_LAST_COMMIT_ID
Run Code Online (Sandbox Code Playgroud)
谢谢!