Git显示来自分支中每个人的所有更改,就像我自己的更改一样
我不是git高手,所以如果我有什么严重的错误,请原谅 我在一个团队项目中,我从分支X(我们的开发分支)创建了一个新的分支Z,对其进行了更改,它已经在我的本地分支上运行了大约一周。同时,我们的团队决定切换到一种方法,并使用新的分支Y作为开发分支。从那时起,其他人(以及我在其他任务中)的每一次提交都被提交到分支Y。今天我想将分支Z中的更改合并到新的开发分支Y。我总共更改了大约15个文件。然而,当我尝试合并分支git(我们在Visual Studio Online上,如果有任何区别的话)时,我在大约13个文件上遇到了合并冲突(包括一些我一生都没有接触过的文件)。我在Visual Studio中说了“中止”。转到分支Y,与它同步(如果需要,它会按顺序获取、拉取和推送),返回到我的分支Z,合并更改并尝试再次同步。上面说我是最新的。我打开了一个将Z合并到Y的拉取请求,问题是:Git显示来自分支中每个人的所有更改,就像我自己的更改一样,git,version-control,Git,Version Control,我不是git高手,所以如果我有什么严重的错误,请原谅 我在一个团队项目中,我从分支X(我们的开发分支)创建了一个新的分支Z,对其进行了更改,它已经在我的本地分支上运行了大约一周。同时,我们的团队决定切换到一种方法,并使用新的分支Y作为开发分支。从那时起,其他人(以及我在其他任务中)的每一次提交都被提交到分支Y。今天我想将分支Z中的更改合并到新的开发分支Y。我总共更改了大约15个文件。然而,当我尝试合并分支git(我们在Visual Studio Online上,如果有任何区别的话)时,我在大约1
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,如下所示(我们可以使用图表进行说明):
git checkout Z
和git reset--hard HEAD~
,因此HEAD将指向分支Z上的Fgit-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,如下所示(我们可以使用图表进行说明):
git checkout Z
和git reset--hard HEAD~
,因此HEAD将指向分支Z上的Fgit-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