这是我们的工作流程:
bug_a
,将分支bug_a
推送到中央存储库。bug_b
,将分支bug_b
推送到中央存储库。develop
分支。让我们假设(为简单起见)两个分支都不接触公共文件。我们的要求是,最终可以重建哪些文件和代码随之改变
bug_a
。 bug_b
也是如此。因此,在bug_a
中合并develop
的提交显示了对此错误A解决方案所做的更改。
现在问题出现了:我正在处理bug_a
,我希望在我的存储库中看到bug_b
的更改。
我知道我可以在bug_b
分支中提取bug_a
的更改但是现在我的要求不是
已完成,因为在develop
的最后合并/提交中,我也看到bug_b
的更改
我无法重建为解决错误A所做的确切更改。
我的问题是Git中有一个命令或程序,其中的更改是在其他分支中进行的 在当地的工作部门可见吗?就像一个透明的“视图”,例如
master
develop
bug_b
*bug_a
答案 0 :(得分:2)
滥用一些术语,每个git repo本身就像一个明确的私人视图:你不能直接看到其他人。 (但是我会提到一条捷径。)
幸运的是,你可以间接地看到他,因为你们两个拥有第三个共享的回购。他推送到共享仓库,然后你fetch
(不要pull
因为这使答案变得复杂)来自共享仓库。现在你可以看到他做了什么,因为fetch
抓住了(无论如何)默认的一切。
这里是git与clearcase非常不同的地方:你通过让git将它提取到某个可见的地方来“看到他做了什么”。它不会“只是出现”,你必须告诉它“让我看看”。
您可以通过执行以下一项或多项操作来查看它:
所有这些都需要了解如何指定特定修订(通过“分支名称”或通过commit-ID或其他)。请记住以下两件重要事项:
remotes/origin/master
和remotes/origin/bug_b
的分支。master
和bug_a
的分支。因此,要查看已fetch
加入remotes/origin/bug_b
的更改,请使用:
git log remotes/origin/bug_b
请注意,您不需要拥有自己的名为bug_b
的分支,更不用说任何合并或提取或其他任何分支。只需命名远程分支,只需要查看即可。如果您要在bug_b
分支上自己完成工作,则只需要自己的分支名称。
这是你不需要了解的更深层次的内容,但你应该偶尔回过头来看:像remotes/origin/bug_b
这样的分支名称实际上只是一种象征性的方式来命名其中一个大git SHA1值如ae0af6d748b98716f0f72e428728345b828c4067
。当fetch
获取所有新文件和树等时,git会做什么,以及所有提交有大毛茸茸ID的提交,并将所有这些提交到您的存储库中;然后更新remotes/x/y
标签以指向每个“远程分支”的“提示”。你的回购拥有每个人都做过的一切,如果需要,就在你的指尖。 (有时候结果是“太多”所以有限制你实际拥有多少的方法,但“一切”是默认的,并且是思考它的方式。)(以明确的方式,你有一个每个VOB的完整副本。幸运的是,git比clearcase更节省空间和时间。)
当你执行git pull
时,你真的做了两件事:git fetch
- 这就是改变 - 然后(通常)改变git merge
。合并将“别人做过的工作”和“你做过的工作”结合起来。当您获取Bob在bug_b
分支上工作时为bug_a
所做的更改时,您不希望这样做。
(或者,您可以告诉git使git pull
表示git fetch
后跟git rebase
。但您也不希望这样。只需坚持使用git fetch
。)
现在,对于该快捷方式:如果您git clone
原始共享仓库,则必须等待Bob git push
将其bug_b
更改回共享仓库,然后才能看他们。但是,如果Bob授予您对其私人仓库的读取权限(通过ssh或其他),则可以将Bob的仓库添加为备用“远程”。您可以将此remotes/origin/bug_b
命名为remotes/bob/
而不是remotes/bob/bug_b
,而是引用git remote update bob
。您可以使用push
获取这些内容。除非你能与Bob协调,否则不要为此烦恼。您{{1}}通常可以使用的单个共享仓库。
答案 1 :(得分:1)
假设您已检出分支A
,并且您想要查看分支B
中所做的更改。然后,您可以看到B
中使用
git log --patch B
将显示B
中提交的所有提交,以及每个提交引入的更改的差异。您可以在the Git docs了解有关使用git log
的更多信息。
如果您没有在本地仓库中通过远程/中央仓库在B
中进行的最新更改,则可以git fetch <remote repo>
将这些更改添加到您的本地仓库中,而无需将这些更改合并到{ {1}}。然后,您可以使用
A
很多Git guis都有视觉差异查看器,您也可以使用它来查看您想要的任何分支。