我们有项目(PHP应用程序),但每个客户端的安装程序各不相同,有时很少,有时甚至更多.不过,源代码的很大一部分很常见.我们将特定安装作为并行分支管理到主分支,我们需要将更改从主分支传输到其他分支.在Git中解决了相同的情况:如何维护(大部分)并行分支只有一些区别?投票最多的解决方案是以这种方式在分支之间转移变更:
git pull
git checkout local
git rebase master
Run Code Online (Sandbox Code Playgroud)
如解决方案中所提到的,它在变基后创建非快进推送,我发现非常令人不快的并发症.我的问题是 - 为什么不这样做:
git pull
git checkout local
git merge master
Run Code Online (Sandbox Code Playgroud) 通常,当您使用git重新定义另一位作者的提交时,git会添加一个Commit:包含您的姓名和电子邮件地址的标头.我有一种情况,我不希望这种情况发生.我希望重新提交的提交最终使用与原始作者自己完成相同的rebase时相同的SHA1.这可能吗?
我正在尝试将我的所有提交从当前分支重新压缩并压缩到主分支.这是我正在尝试做的事情:
git checkout -b new-feature
Run Code Online (Sandbox Code Playgroud)
在我尝试之后做了几次提交:
git rebase -i master
Run Code Online (Sandbox Code Playgroud)
在这种情况下,提交将保留在new-feature分支中
git checkout master
git rebase -i new-feature
Run Code Online (Sandbox Code Playgroud)
它给我和编辑带有noop消息的窗口.
我知道命令:
git merge --squash new-feature
Run Code Online (Sandbox Code Playgroud)
但我正在努力学习rebase命令.
我曾经git-svn创建过SVN存储库的git镜像.SVN内部的结构有点不合标准,因此git创建了一个与分支没有共同提交的master分支.
A---B---C topic
D---E---F---G master
Run Code Online (Sandbox Code Playgroud)
我知道提交A是基于提交的E,我非常肯定我已经解决了导致git无法识别该事实(使用filter-branch)的问题.我想要做的是重新连接topic到master分支,设置E为以下的父代A:
A---B---C topic
/
D---E---F---G master
Run Code Online (Sandbox Code Playgroud)
git-rebase似乎对我没有用,因为提交的差异A列出了已经存在的大量文件的创建master,导致了大量的冲突.
从我对git的理解只是设置E为父母A应该足以解决所有问题.
这可能吗?如果是,我该怎么办?
我可以使用git pull,但它合并我的本地提交.有没有git rebase相当于我可以进行远程更改?
如果我在以下情况,
$ git log --oneline
* abcdef commit #b
* 123456 commit #a
Run Code Online (Sandbox Code Playgroud)
我知道我总能跑
$ git reset HEAD~
$ git commit --amend
Run Code Online (Sandbox Code Playgroud)
但是,我试着跑
$ git rebase -i HEAD~2
Run Code Online (Sandbox Code Playgroud)
但我明白了
fatal: Needed a single revision
invalid upstream HEAD~2
Run Code Online (Sandbox Code Playgroud)
因此我的问题是:有没有办法git rebase用来压缩这两个提交?
当我编写代码时,我将其分解为易于查看的简单逻辑更改.
为此,我使用git rebase -i(交互式)来压缩,删除和更改提交顺序.
我注意到这有时会导致GitHub拉取请求的提交顺序不同(尽管订单保留在远程分支上).
例如,
可能会出现在公关中:
我搜索了互联网,但却设法找到了这个GitHub帮助页面:为什么我的提交顺序错误?他们的回答:
如果您通过git rebase或强制推送重写提交历史记录,您可能会注意到打开拉取请求时您的提交顺序无序.
GitHub强调Pull Requests是一个讨论的空间.它的所有方面 - 注释,引用和提交 - 都按时间顺序表示.在执行rebase时重写Git提交历史记录会改变空时连续体,这意味着提交可能无法按照您在GitHub接口中的预期方式表示.
如果您总是希望按顺序查看提交,我们建议您不要使用
git rebase.但是,请放心,当你看到时间顺序以外的东西时,什么都不会破坏!
有办法解决这个问题吗?
以下是我在尝试'git svn rebase'时遇到的错误:
Byte order is not compatible at ../../lib/Storable.pm (autosplit into ../../lib/auto/Storable/_retrieve.al) line 380, at /usr/lib/perl5/5.10/Memoize/Storable.pm line 21
Run Code Online (Sandbox Code Playgroud)
我正在运行的perl版本是:
$ perl --version
This is perl, v5.10.1 (*) built for i686-cygwin-thread-multi-64int
(with 12 registered patches, see perl -V for more detail)
Run Code Online (Sandbox Code Playgroud)
当我在网上搜索" 字节顺序不兼容 "时,我收到很多点击,显示Perl文档说:
这意味着,如果您在Unix或Linux上使用64位整数配置的perl 5.6.0或5.6.1上运行的Storable 1.x写入数据,那么默认情况下这个Storable将拒绝读取它,给出错误字节顺序不兼容.如果你有这样的数据,那么你应该将$ Storable :: interwork_56_64bit设置为一个真值,以使这个可存储的读取和写入文件与旧标题.您还应该将您的数据或与之通信的任何旧版perl迁移到当前版本的Storable.
我不知道的是,如何将此设置$Storable::interwork_56_64bit为真.你能告诉我怎么做吗?
假设我有一个主题分支,我想重写它的整个历史,因为它最初是从master为pull请求创建的.无论出于何种原因,使用git log确定我想传递给的提交哈希并不容易或明显
git rebase -i <commit>
Run Code Online (Sandbox Code Playgroud)
我知道我可以git merge-base <branch1> <branch2 || master>用来查找两个引用可以跟踪其祖先的提交,并可以使用它来确定提交.我想知道的是,如果有一种更好的方式来交互式地改变整个分支(无论主人是否提高)而不是使用
git rebase -i `git merge-base my_branch master`
Run Code Online (Sandbox Code Playgroud)
编辑:我不想更改在此分支上进行的第一次提交的父级,因此git rebase -i master只有在创建分支并且从当前指向的提交主机创建分支时,两个主服务器都没有高级的情况下才会工作.
Git允许某些命令创建或修改提交而无需先打开编辑器,例如:
git commit --amend --no-edit
git commit --fixup=HEAD^
Run Code Online (Sandbox Code Playgroud)
我已设置rebase.autosquash为true,因此交互式rebase的待办事项列表会自动重新排序.有没有办法立即执行rebase,而无需先打开编辑器,如下所示:
git rebase -i --no-edit HEAD~3
Run Code Online (Sandbox Code Playgroud)