Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.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_Version Control - Fatal编程技术网

Git显示来自分支中每个人的所有更改,就像我自己的更改一样

Git显示来自分支中每个人的所有更改,就像我自己的更改一样,git,version-control,Git,Version Control,我不是git高手,所以如果我有什么严重的错误,请原谅 我在一个团队项目中,我从分支X(我们的开发分支)创建了一个新的分支Z,对其进行了更改,它已经在我的本地分支上运行了大约一周。同时,我们的团队决定切换到一种方法,并使用新的分支Y作为开发分支。从那时起,其他人(以及我在其他任务中)的每一次提交都被提交到分支Y。今天我想将分支Z中的更改合并到新的开发分支Y。我总共更改了大约15个文件。然而,当我尝试合并分支git(我们在Visual Studio Online上,如果有任何区别的话)时,我在大约1

我不是git高手,所以如果我有什么严重的错误,请原谅

我在一个团队项目中,我从分支X(我们的开发分支)创建了一个新的分支Z,对其进行了更改,它已经在我的本地分支上运行了大约一周。同时,我们的团队决定切换到一种方法,并使用新的分支Y作为开发分支。从那时起,其他人(以及我在其他任务中)的每一次提交都被提交到分支Y。今天我想将分支Z中的更改合并到新的开发分支Y。我总共更改了大约15个文件。然而,当我尝试合并分支git(我们在Visual Studio Online上,如果有任何区别的话)时,我在大约13个文件上遇到了合并冲突(包括一些我一生都没有接触过的文件)。我在Visual Studio中说了“中止”。转到分支Y,与它同步(如果需要,它会按顺序获取、拉取和推送),返回到我的分支Z,合并更改并尝试再次同步。上面说我是最新的。我打开了一个将Z合并到Y的拉取请求,问题是:


Git认为团队中每个人在上周所做的所有提交/更改都是我的更改。拉取请求包括其他人已经在分支Y上所做的数百个更改。我如何使拉取请求只包括分支Y上的更改,为什么Git甚至试图将已经在分支Y上的更改合并到Y上,并将它们显示为我所有的更改(如果不是的话)无论如何?

我想,当将
X
合并到
Z
中,然后尝试将其合并到
Y
时,您提到的git历史记录中出现了错误或损坏。我不知道发生这种情况的确切原因,但在本例中,我遵循的是从基本分支创建一个新分支,并
cherry pick
提交:

git checkout Y
git fetch origin && git pull origin Y
git checkout -b new_X
git cherry-pick commit_hash
如果您有多个提交,则按顺序选择提交,如选择您首先提交的提交等


您还可以选择
重新设置分支的基址
,但如果执行错误或在此类情况下,有时重新设置基址会导致大量冲突。这只是我个人在重定基址时遇到的冲突,我并不是说冲突总是会发生,所以在这种情况下,我更喜欢
cherry pick
,而不是
rebase

我猜当将
X
合并到
Z
中,然后尝试将其合并到
Y
中时,git历史记录中出现了错误或中断提到。我不知道发生这种情况的确切原因,但在本例中,我遵循的是从基本分支创建一个新分支,并
cherry pick
提交:

git checkout Y
git fetch origin && git pull origin Y
git checkout -b new_X
git cherry-pick commit_hash
如果您有多个提交,则按顺序选择提交,如选择您首先提交的提交等


您还可以选择
重新设置分支的基址
,但如果执行错误或在此类情况下,有时重新设置基址会导致大量冲突。这只是我个人在重定基址时遇到的冲突,我并不是说冲突总是会发生,所以在这种情况下,我更喜欢
cherry pick
,而不是
rebase

有一件重要的事情,你必须确定远程中是否存在名为Z的分支(可能是你推的,也可能是别人创建的)

若分支Z存在于远程存储库中,那个么其他人修改分支Z的可能性很大。所以,它不仅包含您从远程存储库提取后所做的更改。因此,您必须找到由您提交的提交历史记录。有两种方法可以将分支Z的更改重放到分支Y,如下所示(我们可以使用图表进行说明):

  • 找出你所做的改变。假设在分支Z上,提交D到F是由您完成的,因此您可以使用
    git checkout Z
    git reset--hard HEAD~
    ,因此HEAD将指向分支Z上的F
  • 您可以直接重放对分支Y的更改,使用
    git-rebase--on Y Z
    ,结果如下:

                  I---J---D’---E’---F’    Y
                 /       
    A---B---C---H                         X (development)
    
  • 为了不干扰其他人的更改,您还可以创建新分支并将更改复制到该分支上。使用以下命令:
  • git签出Z

    git签出

    git签出-b newZ

    然后您可以
    创建一个pull请求,将分支newZ合并到分支Y
    ,此合并用于您的更改


    如果Z分支确实只存在于本地回购中,那么这些文件实际上是由Y分支中的其他开发人员修改的。例如test.cs文件没有在Z分支中修改,但是其他开发人员在Y分支中修改了它。当您将Z合并到Y中时,test.cs文件将显示冲突。

    有一件很重要的事情,您必须确保远程中是否存在名为Z的分支(可能由您推送或由其他人创建)

    若分支Z存在于远程存储库中,那个么其他人修改分支Z的可能性很大。所以,它不仅包含您从远程存储库提取后所做的更改。因此,您必须找到由您提交的提交历史记录。有两种方法可以将分支Z的更改重放到分支Y,如下所示(我们可以使用图表进行说明):

  • 找出你所做的改变。假设在分支Z上,提交D到F是由您完成的,因此您可以使用
    git checkout Z
    git reset--hard HEAD~
    ,因此HEAD将指向分支Z上的F
  • 您可以直接重放对分支Y的更改,使用
    git-rebase--on Y Z
    ,结果如下:

                  I---J---D’---E’---F’    Y
                 /       
    A---B---C---H                         X (development)
    
  • 为了不干扰其他人的更改,您还可以创建新分支并将更改复制到该分支上。使用以下命令:
  • git签出Z

    git签出

    git签出-b newZ

    然后您可以
    创建一个pull请求来合并分支newZ int