有时,我遇到的问题是工作站上未提交代码,但尚未准备好提交但需要在其他工作站或笔记本电脑上完成。
是否有人可以解决此问题,例如“软提交”或将更改转移到另一台计算机以在其他地方使用的其他方法?
我希望不要被迫提交和推送未正确实施的更改。
git stash
...?
有时,我遇到的问题是工作站上未提交代码,但尚未准备好提交但需要在其他工作站或笔记本电脑上完成。
是否有人可以解决此问题,例如“软提交”或将更改转移到另一台计算机以在其他地方使用的其他方法?
我希望不要被迫提交和推送未正确实施的更改。
git stash
...?
Answers:
以下假设您的本地存储库是另一个服务器(例如github)上存储库的克隆。并且您有权更改上游服务器。在我的示例中,我将此上游回购称为“来源”。运行git remote show
以列出其他存储库,这可能会提示您有关它的名称。
我建议创建一个分支,然后您可以在另一台计算机上签出该分支。实际上,如果您在开始工作后立即建立分支,则可以“提交”到分支,对工作进行跟踪和备份,而不必具有稳定的代码集。对工作满意后,可以将其合并回“ master”分支。
git checkout -b MyNewBranch
git push origin MyNewBranch
git checkout MyNewBranch
git checkout master
git merge MyNewBranch
git branch
git branch -d master
”,我很困惑,是不是要求git 删除 master分支?(无论如何,这都是我从阅读git分支手册获得的印象)
您可以git diff
用来创建补丁,然后将其应用到其他计算机上。或者,您可以创建一个临时提交,然后将其从其他计算机中拉出。您甚至可以在其他计算机上创建一个临时分支,将您的临时提交推送到那里,然后删除该分支。
我最喜欢的方法是第二种方法:创建一个临时提交,然后转到另一台计算机并执行以下操作:
$ git fetch ssh://first_machine/path/to/repo whatever_branch_i_was_working_on
$ git reset --hard FETCH_HEAD
$ git reset HEAD^
git format-patch
?
git diff
。有什么我想念的吗?
git format-patch deadbee..badcab1e
-它.patch
为每个提交分别创建文件,并保留漂亮的名称和提交消息。
我提交。我将其推送到个人分支,在另一侧签出并修改。并在完成后删除个人分支。
当然,您可以直接在存储库之间进行推送,可以使用bundle或format-patch
/ am
,但是到目前为止,最简单的解决方案是使用个人分支。只要不将历史推送到任何共享分支,重写历史记录就没什么大不了的。在许多项目中,人们应该倒带功能分支,以使它们更易于理解以进行审查。
一种简单的方法就是您描述的一种方法:将.git
隐藏的目录和项目文件复制到另一台计算机上,您可以在其中提交并完成操作,也可以继续工作。
该.git
目录是您保存git历史记录的位置,因此将其与实际文件一起保存可保持整个项目历史记录不变。
如果永久使用原始计算机完成操作,则可能会推荐这种方法。
就像其他人回答的那样,使用Git,您不必关心个人分支中未完成的代码。但是,如果由于某种原因,您真的真的不希望您未完成的工作触及主仓库,则可以利用Git的分布式特性!
有一个名为的简单工具git bundle
,可以帮助您轻松地进行更改而无需中央存储库。首先,克隆仓库:
git clone https://github.com/octocat/Spoon-Knife.git working_copy_1
cd working_copy_1
进行一些更改并将它们提交到临时分支:
git checkout -b tmp_branch
git commit -a -m "temporary changes"
现在,将它们的更改捆绑在一起:
git bundle create ../tmp.bundle tmp_branch
现在,您有了一个捆绑文件,可以将其邮寄到新计算机。您在那里如何使用它?让我们创建一个新的工作副本:
cd ..
git clone https://github.com/octocat/Spoon-Knife.git working_copy_2
cd working_copy_2
我们需要将捆绑软件视为另一个远程设备,以便从中获取更改
git remote add tmp ../tmp.bundle
git fetch tmp
因为整个要点是转移更改而不会留下痕迹,所以我们希望将它们压缩到工作副本中,以丢失临时提交:
git merge tmp/tmp_branch --squash
剩下的就是删除临时遥控器:
git remote remove tmp
小提琴!所做的更改已转移到新的工作副本中,而没有留下分支和提交的痕迹!
但确实-这个过程相当漫长且繁琐。这是Git,而不是SVN-确实没有任何理由不将您的个人分支推到中央仓库。