Git:在不提交的情况下切换工作区(计算机)

3
有没有一种方法可以应用差分补丁或类似的功能而不进行提交/检出操作? 我的情况: 我经常在工作时在不同的计算机之间切换,我的提交历史记录中有很多“更改机器”的消息。
我的初步猜测是这可能会导致其他麻烦,但考虑到是否有适当的解决方案或工作流程来解决这种情况,所以想问一下。
编辑-澄清:计算机已经联网。
编辑-深入思考:现在我想起来,这将通过不使用 Git 来导致修订历史记录出现一些更大的问题。但也许还有其他的工作流解决方案我没有想到?

这些机器以任何方式联网了吗? - TriskalJM
1
如果它们联网,将您的工作副本放在共享网络驱动器中似乎可以解决提交日志混乱的问题。 - TriskalJM
那对我可能真的有帮助。谢谢你的建议。 - Peter Peterson
2
你不能将你的更改push到一个远程仓库,然后当你切换机器时,只需pull它们以更新你的代码吗? - Harmelodic
1
啊,我明白了,对于这种情况可以像TriskalJM所说的那样,在网络驱动器上拥有本地仓库,或者改变你的工作流程,更加频繁地提交少量代码,并尝试在当前工作的机器上完成一个“适合”的提交。然后一旦提交并推送完成,就可以切换机器了。 - Harmelodic
显示剩余2条评论
3个回答

10
git的一个好处是提交(commit)和发布(publish)是分开的。这使得你可以提交(work-in-progress commits)未完成的工作,而不必将其发布,并且在记录中永远保留“混乱历史(messy history)”。
我的建议是,在切换工作空间时继续进行提交(commit),因为这会给你一个确定的时间点的备份,并消除了对工作空间始终联网的依赖(从而实现了与笔记本电脑的高效工作)。
为了解决由于“切换工作空间”提交而导致的杂乱历史问题,我建议你使用主题分支(topic branches)或“dev”分支,并在完成功能后将所有工作提交合并(squash)在一起,然后将新整理的历史合并到主分支(master branch)上。
在你的主题分支上运行`git rebase -i master`命令可以让你分组(group)和压缩(squash)提交(commit),以获得整洁的历史记录(tidy history),然后再将其合并到主分支(master)并推送到“最终历史(final history)”。

1
我认为这是最通用的解决方案,它使用git本身来解决问题。我可以保留自己的工作分支,并将其用于导航功能和工作区。感谢您的建议。我一定会将其添加到我的工作流程中。 - Peter Peterson
这应该是被接受的答案!它完美地工作,并利用了Git的强大功能,没有任何额外的依赖。 - Paul-Sebastian Manole

0

将此作为适当的答案添加,以便可以接受。

共享网络驱动器

由于机器已经联网,只需将您的工作副本放在共享网络资源上即可。这将消除在切换工作站之前提交的需要。


采用这种方法时,如果在一台机器上切换到另一个分支会发生什么? - SO_fix_the_vote_sorting_bug
工作副本(位于网络共享上)现在将位于不同的分支上。在这样做之前,您需要提交或隐藏更改,但无论如何都必须这样做。 - TriskalJM
要小心像JetBrains这样的自动保存IDE,因为如果你同时打开并在它们之间切换并进行工作(尽管是不同的工作),你将拥有两个冲突的编辑器。仅出于这个原因,我建议您选择@tul的答案作为正确答案。 - Paul-Sebastian Manole

0

既然你的机器已经联网,这里还有一个选项,就是从另一台机器远程登录到其中一台机器。有时候这比使用完整的git功能更容易,特别是当你不可预测地频繁更换机器时。在Linux上,你可以使用SSH,在Windows上,你可以使用远程桌面协议。你也可以通过Msys2或Windows子系统在Windows上使用SSH。

VSCode有一个扩展程序,可以使用SSH启用远程开发,这可能对你有所帮助,因为单独使用SSH最适合纯文本的git工作流程。如果不是这样,并且VSCode不够用,你可以在两台机器上启用-X11转发来访问图形界面。

如果你不在本地网络上,请小心使用Windows远程桌面。如果你通过路由器的端口转发将其公开到互联网上,你将会遭受暴力攻击。为了避免这种情况,你可以购买一个内置VPN的路由器。或者也许你的情况允许你忍受这些攻击,并通过超强密码、一个不常见的用户名和一些好运来减轻它们的影响。


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