Android studio 如何仅使用Android Studio git插件GUI对齐git工作副本

Android studio 如何仅使用Android Studio git插件GUI对齐git工作副本,android-studio,testing,github,intellij-idea,version-control,Android Studio,Testing,Github,Intellij Idea,Version Control,对于使用git命令行来实现各种目标,有很多十年前的答案,但这个问题是如何使用Android Studio 3.3.1的标准git插件(GUI)来解决一个常见问题。也许没有git命令行是不可能的。如果是这样的话,那么答案就是:不可能,但是您必须想知道VSC插件的作者 脚本 您想测试一些托管在github.com上的代码,并且只想使用Android Studio的GUI。您被要求进行测试,但不知道如何切换分支并与您应该测试的代码保持精确匹配。您对远程设备具有只读访问权限 签出/克隆 在Android

对于使用git命令行来实现各种目标,有很多十年前的答案,但这个问题是如何使用Android Studio 3.3.1的标准git插件(GUI)来解决一个常见问题。也许没有git命令行是不可能的。如果是这样的话,那么答案就是:不可能,但是您必须想知道VSC插件的作者

脚本 您想测试一些托管在github.com上的代码,并且只想使用Android Studio的GUI。您被要求进行测试,但不知道如何切换分支并与您应该测试的代码保持精确匹配。您对远程设备具有只读访问权限

签出/克隆 在Android Studio中,您可以选择VCS>从版本控制中签出>Git,然后粘贴在使用web浏览器时找到的url。所以可能是这样的https://github.com/someguy42/someproggy42. 你点击测试按钮,它显示连接成功。然后点击克隆按钮

你检查遥控器:VCS>Git>remotes。。。如果您想要的不存在,您可以在github.com中找到存储库的url。您可以将此远程设备的名称指定为someguy42

然后执行获取VCS>Git>fetch。在Android studio的右下角,单击可以看到someguy42\master、someguy42\feature1、someguy42\feature2。您在web上注意到,这两个功能都是从master分支出来的

一切都很好。到目前为止

测试两个分支 要求您测试这两个功能

因此,从左键单击IDE右下角所看到的列表中,右键单击someguy42\feature1>Checkout As…>特点1

您完成了功能1的工作。也许您添加了一个日志语句或其他内容,但您不想保存任何内容

现在是功能2的时候了,所以您可以像以前一样重复这个过程:从IDE右下角的列表中,右键单击someguy42\feature2>Checkout as…>特点2

你注意到一些奇怪的事情。现在您的IDE中混合了feature1和feature2

您可以通过进入Android应用程序文件夹,右键单击并选择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您自己的未限制更改,以确保您的工作区是干净的

如果以上不是您正在经历的,则可能是一个bug。我会删除分支的本地副本,再次检查它们,如果同样的事情再次发生,则在上提交一个bug


PS:也可能是feature2从feature1中选择了更改,尽管这两个分支都来自master。如果是这样的话,那么这些更改也可以在feature2上进行。您可以使用版本控制Alt+9检查功能2的提交日志→ 记录可能按分支过滤:功能2,以检查是否存在这种情况。

我得出的结论是,本地更改还存在其他问题。我认为防止事情越轨的关键是在更改分支之前始终还原本地更改。@Dale这正是我的答案:工作副本将成为功能2和未限制更改的混合体[…]只需回滚Ctrl+Alt+Z或搁置Ctrl+Alt+H您自己的未限制更改,然后再签出其他分支。但是你没有给赏金,没有接受,也没有投票给我答案。我一直在做另一个项目,没有足够的努力回到这个问题上。