使用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\master
,someguy42\feature1
,someguy42\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
的提交日志,以检查是否是这种情况。