我是否应该使用git stash保存项目的正在进行的更改并将其推送到github以便在其他计算机上访问?


20

我经常在项目的某些功能上工作,需要休息一下才能使其足够好提交。但是,我每天使用两台不同的计算机进行编码(我的笔记本电脑和我的研究实验室台式机)。例如:我正在家里进行某项功能,然后停下来去实验室。

我不想将云同步(例如Dropbox)与GitHub远程跟踪混合使用。

我只是在(然后推入)代码之前提交了未完成的(和混乱的)代码状态,仅是为了将其拉入另一台计算机以继续工作。我很确定这是一个不好的做法。

不过今天,我git stash在Google搜寻了一下之后遇到了。这似乎是我需要的完美解决方案。

但是,一旦我推送更改,该文档就不会说是否转到github。除此之外,我想知道是否有一种更有效的方式来实现所需的机动性。

提前致谢!


1
我投票关闭该问题为离题,因为它已经在Stack Overflow
David Arno

5
@DavidArno:我不认为这是跨站点重复。StackOverflow问题与“我可以做X”有关,而这个问题与“ X是一种好的做法”有关。至少,问题的根本原因是不同的。
格雷格·伯格哈特

7
@DavidArno我最后检查的内容是“已经回答”,这并不是关闭问题的理由。
RubberDuck

Answers:


28

我只是在将代码拖入另一台计算机以继续工作之前,就已经提交了我的代码未完成(且混乱)的状态(并将其推送)。我很确定这是一个不好的做法。

可以完成未完成的工作。在主题分支中工作。提早提交,并经常提交。阅读何时提交代码?有关何时提交的一些准则。专门针对Git,提交到主题分支并根据需要多次推送。

如果此主题分支仅适合您,请提交并推送损坏的代码。您只应推迟损坏的代码送到其他人使用的分支。随意破坏自己的代码。


6
我什至会说它更强大:永远不要在master分支上工作,而总是使用topic分支。尽其所能地致力于它,毫不畏惧地推动它。当您对更改感到满意时,请将其合并到母版中。
9000

很好的建议!我认为可能会发生很大的混乱,因为我们需要在提交中添加评论,有时它的确是“正在进行的任务”之类的东西。是的,我在这个部门独自工作,所以您所说的一切都说得通!
Leandro

4
这也使您可以选择在合并分支git merge
snoopy

2
@Leandro commit消息应尽可能合理且清晰。例如,即使是WIP,您也可以说“添加控制器以处理页面请求-WIP”。提交消息还提供可搜索的项目更改历史记录。例如,十次提交的“ WIP”不会帮助任何寻求与处理用户相关的更改的人。

7

储藏池仅供本地使用,是在您乱逛树枝时放置东西的临时场所。

如果您是唯一在分支上工作的人,则提交已损坏的代码没有问题。在类似情况下,我要做的是执行损坏的提交,然后将其拉到另一个位置后,执行a git reset HEAD~1撤消操作。当然,这需要--force在您pullspushes您更改位置时使用。

或者我只是等到我第一次提交并执行一次git commit --amend。或者,当我提交功能分支时,我只是压扁所有损坏的提交。或者,我只是不用担心我的历史记录中有一些明显标记的断断续续的提交,因为我倾向于在一个良好的停车位之前不离开。有很多选择。


1
我不建议您习惯于--amend这样做--force,尽管如此,它还是需要推动的。最好只将其提交给一次性分支。
大约

1

stash除了清理您的工作目录以“取消分支的分支”之外,对其他事情并没有真正的满足;如果您不立即stash pop返回状态,那么事情将变得非常混乱。

如果有实际的工作要保存,即使这对于永久性的回购来说也不是一件好事,那它仍然应该是一次提交。实际上,我永远不会将工作目录置于不受版本控制的状态–我使用一些非常简单的Python脚本将所有更改保存为临时提交。如果您想尝试一下,请执行以下操作:

  1. 完成一些未完成的工作并准备离开工作场所后,执行git-tmp-commit。它将所有更改自动提交到一个新的唯一分支。
  2. 将此分支推送到远程。
  3. 离开。
  4. 如果要继续,请再次从远程克隆该分支。我使用ccd脚本执行此操作,该脚本实际上检出从头到临时文件夹的所有内容,自动选择最新的分支...,但是您也可以手动temporary-commits/original-branch/YYYY-MM-DD...从存储库的现有克隆中手动获取并检出该分支。
  5. 最后,使用取消提交更改git-tmp-commit -r。这将使您回到原始分支(例如master),并将临时提交的更改保留在工作目录中,因此您可以在此处继续进行,直到可以进行适当的提交为止(如果需要再次离开,则可以是临时提交)。

现在编写脚本的方式,仅在checkout repo中没有分支的master情况下才有效。因此,您有疑问git branch -d master;这显然不是很理想...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.