Android Studio项目更新:合并vs衍合vs分支默认选项

64
如果有人推送到主分支,而您想拉取新的主分支以更新项目/合并代码,以此不会覆盖您正在进行但尚未提交和推送到主分支的工作。这种情况下,多人同时在同一项目上工作(例如在Android Studio中的一个Android应用程序),最好的选择是什么?当单击“更新项目”时,Android Studio列出了“Merge”、“Rebase”和“Branch Default”。从听起来的意思来看,我应该选择“Rebase”(然后再进行“Merge”?),但我不是完全确定。

你所有的更改都没有提交吗?还是你有一些之前提交但没有推送的更改? - Bryan Herbst
1
用户正在进行的所有更改都是未提交的;任何提交都将立即跟随推送。 - Kurt Wagner
请查看此链接:https://www.jetbrains.com/help/idea/sync-with-a-remote-repository.html - linker
6个回答

45

暂存

关键在于你有未提交的工作需要保存。在尝试合并任何内容之前,应该暂存您的更改以保存未提交的更改并清理您的工作目录。

运行 git stash 来暂存您的更改。然后,您应该能够无问题地拉取更改。

在成功拉取后,可以使用 git stash apply 重新应用在拉取之前所做的更改。

合并和变基

只有当您只有未提交的更改时,才能使用暂存来保存您的更改。如果您在某个时候提交了但没有推送,则需要执行变基或合并操作。

这篇StackOverflow文章提供了一些关于区别的很好信息。

通常情况下,合并操作更简单,但是有些人认为它会"污染"git历史记录与合并提交。

变基需要额外的工作,但由于没有合并提交,因此它将使合并不可见。

同样,在您的情况下,您不需要合并或变基。只需暂存、拉取,然后应用暂存即可。


我想尽可能简单(即只需要打开Android Studio IDE)。有没有不涉及使用Git Bash,仅利用Android Studio的解决方案? - Kurt Wagner
没事了,我重新阅读了一下,根据你的回答,如果我只想使用AS,那么在拉取时我想选择“合并”。 - Kurt Wagner
我写了一行新代码://test,提交并推送到主分支,确认已经推送到主分支,然后在本地删除了//test行,并尝试使用合并和默认分支的“更新项目”选项,但是该行代码没有返回。不确定为什么它没有从主分支拉取//test行代码。 :X - Kurt Wagner
1
IntelliJ(和Android Studio)确实有一个存储选项-它位于VCS> Git> Stash更改下面。 - Bryan Herbst

21

enter image description here

根据 IntelliJ IDEA 的文档

更新类型

  • 合并:选择此选项以应用合并策略。结果与运行 git fetch;git mergegit pull --no-rebase 相同。
  • 变基:选择此选项以应用变基策略。结果与运行 git fetch;git rebasegit pull --rebase 相同。
  • 分支默认命令:选择此选项以应用分支的默认命令。默认命令在 .git/config 配置文件的 branch.<name> 部分中指定。

更新前清理工作区

在此区域中,指定在更新之前清理您的工作树时保存更改的方法。更新完成后将恢复更改。可用的选项如下:

  • 使用存储:选择此选项以在 Git 存储中保存更改,因此即使在 IntelliJ IDEA 之外,您也可以使用由 Git 生成的存储更改应用补丁。
  • 使用货架:选择此选项以将更改保存在货架上。货架是 IntelliJ IDEA 的内部操作,从保存的更改生成的补丁通常在 IntelliJ IDEA 内部应用(取消存储)。在 IntelliJ IDEA 之外应用已存储的更改也可能,但需要额外的步骤。

1
@MikeW 这取决于你的 .git/config 文件。 - Volodymyr
如果我勾选了“以后不再显示此对话框”,如何重新打开? - elliotching

9

我在Google的任何文档中都找不到这个问题的答案(即工作流程)......所以这是我使用Android Studio和Git完全基于UI的实际经验。

(一想到在命令行和IDE之间切换,我就感到恶心 - 这意味着IDE缺乏!)

  1. 将更改存储在:右键单击项目-> Git->存储库->隐藏更改。给它一个名字。
  2. 使用以下命令拉取同事进行的更新:右键单击项目-> Git->存储库->拉取
  3. 将您的代码更改合并回来:右键单击项目-> Git->存储库->取消隐藏更改->应用隐藏
  4. 然后,您将看到一个“带有冲突合并的文件”UI。这是您选择文件并有选择性地合并的位置。

警告

手动合并“合并修订版本”的UI非常糟糕。一旦您尝试,您就会知道我的意思。祝你好运让“同步滚动”实际起作用。我真诚地希望这个UI在2015年的前几周得到解决。


4

Android Studio:合并、变基、分支默认

根据文档

合并:选择此选项在更新期间执行合并。这相当于运行git fetch,然后git mergegit pull --no-rebase

变基:选择此选项在更新期间执行变基。这相当于运行git fetch,然后git rebase或`git pull --rebase(所有本地提交将放在更新的上游头部之上)。

分支默认:如果您想为不同的分支应用不同的更新策略,请选择此选项。您可以在.git/config配置文件的branch.<name>部分中指定每个分支的默认更新类型。

[Git Merge vs Rebase]

阅读更多这里


3

针对那些在寻找Android Studio中的rebase选项的用户。

VCS > Git > Rebase。

enter image description here

enter image description here

然后点击“Rebase”,“开始变基”,“合并”。为了简化过程,可以点击“全部”来解决非冲突性更改。

enter image description here

可能会有冲突的更改,请解决它们,直到您收到一条消息:

enter image description here

如果您遇到这些冲突,请点击左右箭头以接受最合适的选项:

enter image description here

点击箭头接受更改或者点击叉号忽略不必要的更改:

enter image description here

如果您接受这两个更改,您还可以编辑生成的代码,例如,在方法中添加缺少的 }
一直重复此过程,直到所有冲突都得到解决。

enter image description here

点击"应用"。当一个提交中的所有文件都被更新时,点击"继续变基"以移动到下一个提交。


-1

使用Android Studio终端更新Git项目

  1. git add .
  2. git commit -m "任何内容"
  3. git push origin master

这就是我想从你的帖子中找到答案的原因,所以我写下了这个回答。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接