使用git命令行完成各种目标有十多年的答案,但是这个问题是如何使用Android Studio 3.3.1和GUI的标准git插件来“修复”一个常见的“问题”。也许没有git命令行是“不可能的”。如果是这样,那就是答案:“不可能”,但是您将不得不怀疑VSC插件的作者。

情境

您想测试托管在github.com上的某些代码,并且只想使用Android Studio的GUI。系统会要求您进行测试,但不知道如何切换分支并与要测试的代码保持完全匹配。您对遥控器具有只读访问权限。

结帐/克隆

在Android Studio中,选择VCS > Checkout from Version Control > Git,然后在使用网络浏览器时粘贴找到的URL。因此可能类似于https://github.com/someguy42/someproggy42。您单击测试按钮,它说连接成功。然后单击“克隆”按钮。

您检查遥控器:VCS > Git > Remotes...如果您要的遥控器不在,请执行(plus sign) > (url of repository found in github.com)。您将此远程的名称指定为someguy42

然后,执行提取VCS > Git > Fetch。在Android Studio的右下角,单击,然后看到someguy42\mastersomeguy42\feature1someguy42\feature2。您在网络上注意到这两个功能都是从master分支出来的。

一切都很好。至今。

测试两个分支

您需要测试两个功能。

因此,通过在IDE的右下角上单击鼠标左键,可以在列表中右键单击someguy42\feature1 > Checkout As... > feature1

您完成了功能1上的工作。也许您添加了一条日志记录语句或其他内容,但是却不想保存。

现在是功能2的时候了,因此您可以像以前一样重复该过程:从IDE右下角的列表中,右键单击someguy42\feature2 > Checkout As... > feature2

您会发现有些奇怪。现在,您的IDE中混合了Feature1和Feature2!

您可以通过转到Android app文件夹来证明自己,右键单击并选择Git > Compare with Branch...,然后将其与远程someguy42\master进行比较。您希望仅在Feature2中看到文件更改,但是Feature1和Feature2文件都在列表中。



通过仅通过Android Studio GUI和VCS插件执行的哪些步骤,可以使您的工作副本仅是来自feature2的文件的有保证的原始副本?

最佳答案

我不是Android Studio用户,但是我使用Intellij Ultimate,并且您遇到的行为不是预期的。



如果我检出feature1,不做任何更改,然后检出feature2,则我的工作副本将完全变为feature2-来自feature1的所有内容也都不在feature2中。那应该是这样的。

但是,如果我在feature1中修改了一些文件,然后检出了feature2(不首先提交所说的更改),我的工作副本将变成feature2和我在feature1上所做的未提交更改的混合体-更改可能包含也可能不包含来自feature1本身的代码。

给出的示例:如果feature1引入了新参数newParam1,并且出于测试目的,我引入了这样的日志行:

private doSomething(String oldParam, String newParam1) { // feature1 change
    logger.debug("newParam1="+newParam1); // my own uncommited change
    //...


然后,在不提交该行的情况下,我切换到feature2,它引入了一个新的但不同的newParam2,我最终得到了这一点:

private doSomething(String oldParam, String newParam2) { // feature2 change
    logger.debug("newParam1="+newParam1); // my own uncommited change
    //...


那应该是这样的。
如果那是您遇到的问题,那没关系-只需回滚(Ctrl + Alt + Z)或搁置(Ctrl + Alt + H)您自己的未提交更改,然后再签出其他分支,以确保您的工作区是干净的。

如果以上不是您所遇到的,则可能是一个错误。我将删除分支的本地副本,再次将其检出,如果再次发生相同的情况,请在YouTrack处提交错误。



PS:尽管两个分支都出自feature2,但feature1可能也会从master那里挑选变化。如果是这种情况,那么将这些更改也放在feature2上就可以了。您可以使用版本控制(Alt + 9)→日志(可能通过Branch:feature2进行过滤)检查feature2的提交日志,以检查是否是这种情况。

10-07 12:28