我开始研究一个新功能,经过一段时间的编码,我决定这个功能应该在它自己的分支上.
如何将现有的未提交更改移动到新分支并重置当前更改?
我想重置当前分支,同时保留新功能的现有工作.
我一直在Windows上使用git一段时间(使用msysGit),我喜欢分布式源代码控制的想法.就在最近,我一直在关注Mercurial(hg),它看起来很有趣.但是,我无法解决hg和git之间的差异.
有没有人在git和hg之间进行并列比较?我很想知道hg和git的不同之处,而不必参加讨论.
我刚刚对错误的分支做了很好的提交.如何撤消我的主分支中的最后一次提交,然后进行相同的更改并将它们放入我的升级分支?
我已经完成了相当多的工作("你的分支在37次提交之前超过了'origin/master'.")这真的应该进入它自己的分支而不是进入master
.这些提交只存在于我的本地机器上,并没有被推到origin
,但情况有点复杂,因为其他开发人员一直在推动origin/master
,我已经撤消了这些更改.
如何追溯将我的37个本地提交移动到新分支?根据文档,似乎git rebase --onto my-new-branch master
或...origin/master
应该这样做,但两者都只是给我错误"致命:需要单一修订". man git-rebase
没有提供修改,rebase
并且其示例没有这样做,所以我不知道如何解决此错误.
(请注意,这不是将现有的,未完成的工作移动到Git中的新分支或如何将我的本地未提交的更改合并到另一个Git分支中的重复?因为这些问题涉及本地工作树中未提交的更改,而不是具有的更改已在当地承诺.)
情况:
这样:
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
Run Code Online (Sandbox Code Playgroud)
然后我开始研究quickfix2,但不小心将quickfix1作为源分支进行复制,而不是master.现在quickfix2处于X + 2提交+ 2相关提交.
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
\
q2a--q2b (quickfix2 HEAD)
Run Code Online (Sandbox Code Playgroud)
现在我希望有一个quickfix2分支,但没有属于quickfix1的2次提交.
q2a'--q2b' (quickfix2 HEAD)
/
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
Run Code Online (Sandbox Code Playgroud)
我尝试从quickfix2中的某个修订版创建补丁,但补丁不保留提交历史记录.有没有办法保存我的提交历史记录,但有一个分支没有更改quickfix1?
我刚刚读过修改git过去提交中的单个文件,但不幸的是,接受的解决方案"重新排序"了提交,这不是我想要的.所以这是我的问题:
我偶尔会在处理(无关)功能时发现我的代码中存在错误.然后快速git blame
揭示该错误已经被引入了一些提交之前(我提交了很多,所以通常它不是引入该错误的最新提交).此时,我通常这样做:
git stash # temporarily put my work aside
git rebase -i <bad_commit>~1 # rebase one step before the bad commit
# mark broken commit for editing
vim <affected_sources> # fix the bug
git add <affected_sources> # stage fixes
git commit -C <bad_commit> # commit fixes using same log message as before
git rebase --continue # base all later changes onto this
Run Code Online (Sandbox Code Playgroud)
然而,这种情况经常发生,上述序列变得烦人.特别是'互动式底板'很无聊.上面的序列是否有任何快捷方式,这可以让我修改过去的任意提交和分阶段的更改?我完全清楚这会改变历史,但我经常犯错误,所以我真的很喜欢这样的事情.
vim <affected_sources> # fix bug
git add -p <affected_sources> # Mark …
Run Code Online (Sandbox Code Playgroud) (这个问题是相反这一个)
我该怎么做呢?
dev C - D
/
master A - B
Run Code Online (Sandbox Code Playgroud)
这个?
dev D
/
master A - B - C
Run Code Online (Sandbox Code Playgroud)
我知道当我看到答案时我会踢自己,但目前我有点卡住了......
我正在努力学习如何有效地使用Git,我想知道我应该如何(良好做法/不良做法?)解决以下案例:
假设我在master中有以下提交链:
然后我意识到在最后两次提交中完成的操作是完全错误的,我需要再次从Commit 1开始.问题:
我的老板最近决定尝试一个"增加容量"的外包小组,因为我们修改现有的应用程序以添加新功能.尽管我担心他所选择的小组似乎并没有很好地沟通,也没有提出足够的问题来真正理解和有效,但我们还是和他们一起去了.
我们将它们设置为在我们的Git存储库(托管在GitHub上)上进行协作.我们为他们创建了一个分支(TheOutsourcedBranch,我们称之为),并要求他们在这个分支中完成所有工作.
此外,我们要求他们在每天结束时推送他们的提交,以便我们可以很好地了解他们的工作速度,以及(更重要的是)他们的代码有多好.
今天他们第一次推了推.五个提交,所有这些都是主人.我正在试图弄清楚如何将他们的提交从master转移到TheOutsourcedBranch,而不会丢失他们已经完成的工作(尽管从它的外观来看,无论如何我们都不得不扔掉它).
橙点是他们的承诺,灰点是我的.
我知道有很多关于变基的问题(这可能是我在这里需要做的)但我很难弄清楚哪些适用于我的具体情况.如果重要的话,外包集团和我自己是现在唯一真正使用回购的人.
提前致谢!
编辑: 我可能已找到我正在寻找的内容:使用Git将最近的提交移动到新的分支
不过,我想检查一下我的理解.在本地,我创建了一个主要的分支(TheOutsourcedBranch),它将包含所有AH.然后我将主人重置为C.主人现在包含AC.
假设这是正确的,那对我(本地)来说没问题.但是,我需要做些什么才能"强制"远程存储库(GitHub)接受我对本地事件如何发挥作用的本地视图并丢弃其历史版本?
一旦这个问题发生了,我想我可以重新解决这个问题,使其更具通用性/信息性,并减少一些毛病 - 否则它可能是一个很好的删除候选人,我猜.
我怀疑我的问题的答案是相当简单的,但我是一个git新手,我的头脑在阅读所有类似的SoF问题的答案时感到困惑,这些问题似乎并不是我的问题.
这是我的问题:
我在github有一个回购,有一个分支('master'),我一直在我的本地仓库工作.在某些时候,我停止将提交重新提交给github上的主人,因为我担心他们会破坏事情.所以现在我在本地仓库中有很多提交,我想要回到github.
然而,我宁愿在github('development')上创建一个新的分支,而不是推回到master,我将所有本地提交推回到该分支(只有在它们更好之后我才会合并回master.测试).
这样做的简单方法是什么?
git ×10
commit ×2
git-branch ×2
git-reset ×2
github ×2
branch ×1
comparison ×1
dvcs ×1
git-commit ×1
git-rebase ×1
git-stash ×1
mercurial ×1
patch ×1
rebase ×1
rewrite ×1