标签: rebase

Git:如何维护永久并行分支

我们有项目(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 merge branch rebase

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

如何在不将自己添加为提交者的情况下重新提交另一位作者的提交?

通常,当您使用git重新定义另一位作者的提交时,git会添加一个Commit:包含您的姓名和电子邮件地址的标头.我有一种情况,我不希望这种情况发生.我希望重新提交的提交最终使用与原始作者自己完成相同的rebase时相同的SHA1.这可能吗?

git rebase

24
推荐指数
3
解决办法
5983
查看次数

Git:如何从一个分支到另一个主要的提交和压缩提交?

我正在尝试将我的所有提交从当前分支重新压缩并压缩到主分支.这是我正在尝试做的事情:

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 branch rebase squash

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

git - 设置一个没有rebase的commit的父级

我曾经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)的问题.我想要做的是重新连接topicmaster分支,设置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 rebase

23
推荐指数
3
解决办法
6006
查看次数

如何使用rebase而不是合并来拉取所有远程更改?

我可以使用git pull,但它合并我的本地提交.有没有git rebase相当于我可以进行远程更改?

git version-control pull rebase

23
推荐指数
3
解决办法
6699
查看次数

如何在分支的第一个(根)提交上使用交互式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 squash

23
推荐指数
3
解决办法
7720
查看次数

如何修复GitHub拉取请求中的提交顺序,由git rebase打破?

当我编写代码时,我将其分解为易于查看的简单逻辑更改.

为此,我使用git rebase -i(交互式)来压缩,删除和更改提交顺序.

我注意到这有时会导致GitHub拉取请求的提交顺序不同(尽管订单保留在远程分支上).

例如,

  • 提交1
  • 提交2
  • 提交3

可能会出现在公关中:

  • 提交3
  • 提交1
  • 提交2

我搜索了互联网,但却设法找到了这个GitHub帮助页面:为什么我的提交顺序错误?他们的回答:

如果您通过git rebase或强制推送重写提交历史记录,您可能会注意到打开拉取请求时您的提交顺序无序.

GitHub强调Pull Requests是一个讨论的空间.它的所有方面 - 注释,引用和提交 - 都按时间顺序表示.在执行rebase时重写Git提交历史记录会改变空时连续体,这意味着提交可能无法按照您在GitHub接口中的预期方式表示.

如果您总是希望按顺序查看提交,我们建议您不要使用 git rebase.但是,请放心,当你看到时间顺序以外的东西时,什么都不会破坏!

有办法解决这个问题吗?

git github rebase

23
推荐指数
3
解决办法
2991
查看次数

git svn 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为真.你能告诉我怎么做吗?

perl compatibility git-svn rebase endianness

22
推荐指数
2
解决办法
3525
查看次数

一个分支的交互式变基,其与主人的分歧点

假设我有一个主题分支,我想重写它的整个历史,因为它最初是从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 rebase

21
推荐指数
2
解决办法
6094
查看次数

Git交互式rebase而无需打开编辑器

Git允许某些命令创建或修改提交而无需先打开编辑器,例如:

git commit --amend --no-edit
git commit --fixup=HEAD^
Run Code Online (Sandbox Code Playgroud)

我已设置rebase.autosquashtrue,因此交互式rebase的待办事项列表会自动重新排序.有没有办法立即执行rebase,而无需先打开编辑器,如下所示:

git rebase -i --no-edit HEAD~3
Run Code Online (Sandbox Code Playgroud)

git rebase git-rebase

21
推荐指数
3
解决办法
2887
查看次数