使用 git-svn,如果我有多个提交不在 svn 中,如何仅将选定的提交推送到 svn?
假设我的本地 git 存储库中有多个提交尚未推送到 svn。例如,master 上的这四个提交。
A <-- B <-- C <-- D
A 是不在 svn 中的最旧的提交,D 是最新的提交。
如何使用 git svn dcommit 只将 A 和 B 推送到 svn,而只将 C 和 D 保留在本地 git 存储库中?
欢迎使用替代工作流程。
Let's say I have multiple commits in my local git repository that have not been pushed to svn. For example, these four commits on master.
A <-- B <-- C <-- D
A is the oldest commit not in svn and D is the newest commit.
How do I use git svn dcommit
to only push A and B to svn, but keep C and D only in my local git repository?
Alternate workflows welcome.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
dcommit
采用一个可选参数,指定在提交期间将什么视为 HEAD,因此这些工作中的任何一个都有效(其中B
是对该特定提交的引用,如果它具有一个或通过哈希):dcommit
takes an optional argument specifying what to treat as HEAD during commits, so either of these work (whereB
is a reference to that particular commit, either by name if it has one or by hash):我一直在思考这个问题,并对我自己的问题有一个潜在的解决方案。
我可以为我正在处理的每个离散任务创建一个本地分支。如果我完成了一项工作并正在等待代码审查,我可以创建一个新分支并开始处理一项独立任务。
当给定的任务完成后,我运行 git svn rebase 。然后,我在 master 之上重新调整本地分支,将 master 快进到该分支的头部,然后 dcommit。
我的问题是提交 A 和 B 是一项任务的一部分,而 C 和 D 是另一项独立任务。 C 和 D 属于不同的分支,永远不应该在 A 和 B 之上提交。
这个问题的答案...
git-svn dcommiting a single git commit
似乎表明只提交 A 和 B 是不可能的。
I've been thinking about this, and have a potential solution to my own problem.
I can create a local branch for each discrete task I'm working on. If I finish one piece of work and am waiting for a code review, I can create a new branch and start working on an independent task.
When a given task is complete, I run
git svn rebase
. I then rebase my local branch on top of master, fast forward master to the head of that branch, then dcommit.My problem was that commits A and B were part of one task, and C and D were another independent task. C and D belong in a different branch, and never should have been committed on top of A and B.
The answers to this question...
git-svn dcommiting a single git commit
Seem to indicate that only committing A and B isn't really possible.