Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git-我的工作流的合并与重新基础_Git_Perforce_Git Rebase_Git Merge - Fatal编程技术网

Git-我的工作流的合并与重新基础

Git-我的工作流的合并与重新基础,git,perforce,git-rebase,git-merge,Git,Perforce,Git Rebase,Git Merge,我一直在读一些关于git merge和git rebase操作是如何工作的,我认为我对这些差异有了非常基本的理解。我已经看到了图表:-)尽管如此,我仍然不清楚在我当前的工作流中使用这两个图中的哪一个是最好的 我的工作是使用performe作为SCM系统,但我在本地使用git来跟踪本地更改,进行重构,以及git可以带来的其他一些很酷的东西。我知道已经有一个工具可以帮助facility使用git和perforce(例如p4 git),但我不一定想要/需要这种开销,所以我尽量让事情尽可能简单。以下是我

我一直在读一些关于git mergegit rebase操作是如何工作的,我认为我对这些差异有了非常基本的理解。我已经看到了图表:-)尽管如此,我仍然不清楚在我当前的工作流中使用这两个图中的哪一个是最好的

我的工作是使用performe作为SCM系统,但我在本地使用git来跟踪本地更改,进行重构,以及git可以带来的其他一些很酷的东西。我知道已经有一个工具可以帮助facility使用git和perforce(例如p4 git),但我不一定想要/需要这种开销,所以我尽量让事情尽可能简单。以下是我当前创建本地git分支机构并最终整合回主要Performce仓库的工作流程的简要说明:

  • 我有一个mastergit分支,它每晚对我们的代码库进行p4同步。在perforce同步之后,我将所有更改提交到主分支。实际上,mymastergit分支本质上是提交给Performce主线的最新代码的快照

  • 对于我正在处理的本地更改,我总是先创建一个git分支,然后在处理更改时签出该分支

  • 我想不时地从主机将分支更新为最新版本。到目前为止,我刚刚发布了一个git merge master命令来实现这一点,而且效果很好

  • 当我准备好提交到实际的Performance depot时,我通过签出master并发出git merge branch然后使用常规Performance命令提交,将我的分支合并回我的master分支

  • 考虑到我的工作流程,我真的应该在步骤3中使用git-rebase-master命令而不是git-merge-master?根据我对rebase命令的理解,只有当我们的性能主线(远程仓库)被分支,并且我想基于此分支创建一个新的(比如我称之为master newbranch)并将我的更改应用于此新分支时,这才是必要的。我需要先从这个分支重新设置基础

    一般来说,我当前的工作流程有意义吗?或者我已经养成了一些坏习惯吗?

    在这种情况下,您不应该(一定)使用“重基重合并”。请记住,rebase本质上是重写您的历史。它在清理多个分支和提供更线性的历史记录方面很有用,但是从您的用例来看,使用rebase并没有获得任何好处。您描述的行为是为merge设计的正常git工作流


    关于rebase,最棘手的事情是,当您重新设置(重新编写历史记录)您已经推送的提交时。这可能会在与其他人协作时引起很大的麻烦,但您正在使用Performance进行协作,因此不太可能遇到此问题

    我的工作流程大致相同,更喜欢使用git rebase-I master。这将使所有perforce重新同步保持在更改列表的底部。因此,我似乎签出了最新版本,并做了大量更改。此外,在重新同步后,仅显示与分支相关的更改。看起来更直观,但听起来更像是风格而不是正确性~Ben正在改写你的历史。所以,这取决于你想如何保存你的历史。总的来说,Rebase使历史更加清晰

    历史记录显示项目中发生的情况。但是,你不必揭露你所做的一切。想象你正在写一本书。您不必向用户显示您的写作历史记录,包括草稿版本


    在我的情况下,在将主节点合并到分支时,我通常更喜欢重基而不是合并。

    非常有兴趣了解这个问题的进展情况-无法对您的实际问题发表评论,但是,在您尝试将分支合并到master之前立即与master进行p4同步难道不是明智之举吗?我想到的是juniochamano(git的维护者)。它是为纯git用户设计的,而不是像您这样的perforce git环境,但它仍然可以提供一些见解。MatrixFrog-非常有趣的文章,感谢链接!读完后,我想我大体上同意Junio的说法,我不应该用master的最新变化刷新我的分支。相反,当功能准备就绪时,我可以在提交之前将其合并回主功能。唯一的问题是,我的“数据”不在git控制之下(要跟踪的二进制数据超过20GB),偶尔数据会发生变化,这会破坏代码(我知道编码不好!),这迫使我从master.cristobalito刷新我的分支-你是对的。我离开了那一步,但是的,在引入分支之前,我总是在主机上进行p4同步。这让我想起了我首先需要将主机合并到分支中的另一个原因——当我在主机和分支之间进行“区分”时,我只想看到我更改的文件,而不是在我进行分支和主机中更新的内容之间更改的所有内容。在那之后,我可以使用“git diff branch master——name only | p4-x-open”这一技巧,让git吐出我更改过的任何文件名,然后用performance打开它们。在我的用例中,似乎没有必要也可能不希望使用rebase。能够回顾我的本地历史记录以跟踪我的更改/进度对我来说是件好事(这是我首先将git添加到工作流中的原因之一)。