git - Visual Studio Git 推送特定的传出提交
问题描述
我进行了几处代码更改,然后将它们从 Visual Studio Team Explorer 中的 (Changes) 提交到我的本地存储库。一旦我将更改提交到本地,所有提交都会自动列在(同步)传出提交中。但是,我只打算推送一些,而不是所有的提交到远程仓库。如何从列表中删除我不打算推送的任何项目或仅选择我打算推送的项目?谢谢!
解决方案
在git
每个提交中指向其父级,然后指向其父级,依此类推,直到您到达第一个提交。
所以,如果你有这个本地分支:
myBranch o--A--X--B--Y--C--Z
但是您只想将提交推XYZ
送到remote
获取:
remote/myBranch o--X--Y--Z
这是不可能的。提交Z
有父级C
,它不能有父级Y
。
无论如何,让我们做吧
我知道我刚才说过这是不可能的,但我们可以做一些非常接近的事情。
从这个结构开始:
master o
\
myBranch A--X--B--Y--C--Z
我们想分离ABC
and XYZ
,推XYZ
送到远程,并保留ABC
在本地。
git checkout myBranch
- 切换到当前分支,上面有所有内容git branch -b myBranch-old
- 创建分支原始状态的副本git log
- 列出从最近开始的提交。记下每个提交的完整提交 IDgit reset --hard master
- 在应用任何更改之前重置myBranch
(注意:如果您在这里没有方便的分支,您可以使用上面的适当提交 ID)git cherry-pick X
- 将提交复制X
到当前分支git cherry-pick Y
- 将提交复制Y
到当前分支git cherry-pick Z
- 将提交复制Z
到当前分支git push --force
- 将当前更改推送到遥控器。这--force
是必要的,因为我们正在改写历史
当前状态:
master o
|\
myBranch (and remote) \ X`-Y`-Z`
\
myBranch-old A--X--B--Y--C--Z
现在重新应用其他更改。
git cherry-pick A
- 将提交复制A
到当前分支git cherry-pick B
- 将提交复制B
到当前分支git cherry-pick C
- 将提交复制C
到当前分支
最终状态:
master o
|\
remote/myBranch | X`-Y`-Z`
| \
myBranch \ A`-B`-C`
\
myBranch-old A--X--B--Y--C--Z
现在删除myBranch-old
,一切都完成了。
但这太疯狂了!
是的。最重要的是,您不应该像这样混合不相关的更改。分支是你的朋友。做更多的分支。在git
, 不像TFS
orSVN
中,分支几乎是免费的——无论是在存储还是处理方面。事实上,成本是如此之低,我并不担心团队存储库中的分支数量,直到它达到 1000 个为止。即便如此,更关心的是阅读这么多分支,而不是实际的性能影响。
我不知道你是如何进入提示这个问题的情况的,但修复总是相同的:新任务 = 新分支。总是
推荐阅读
- python - 应用程序下载后启动时出现 py2app 错误
- json - 如何创建一行中每一列的Json对象
- c# - 如何获得随机数的平均值
- ios - UISegmentedControl 可访问性模式样式
- c - 如何在 C 中打印出特殊字符,如 å、ä、ö?
- python - 理解给定函数中整数的操作
- javascript - 在 Javascript 中实现时 Builder 方法中的循环陷阱
- python - 我如何打开文件夹中的 json 文件并阅读它们或在 python 中打印它们
- wix - WixRemoveFoldersEx 在安装和卸载期间似乎都在触发
- javascript - 如何在滚动时将元素从上方粘贴到顶部?