我很擅长使用Git。
我在一个存储库上工作,我试图重构代码并失败,所以我最终返回主分支上的1个提交,而是在我以前的位置工作。我现在做了一些我想要保留的更改,并且不希望与之前的提交合并。提前提交已经在远程存储库中。
在保持我所做的更改而不是合并的情况下,什么是不会干扰本地和远程存储库提交的解决方案?
这是一个用于澄清的git日志。 HEAD,主提交是我刚刚尝试做的但不会让我。 origin / master是分支的尖端,也是Github的(我想。)
* bb1d222 (HEAD, master)
| * 832e8af (origin/master)
|/
* 3293d35
答案 0 :(得分:1)
根据您的问题和后续评论,我的理解是您的回购(最近)历史记录如下,
* bb1d222 (HEAD, master)
| * 832e8af (origin/master)
|/
* 3293d35
其中commit 832e8af
对应于您重构代码失败的尝试。
假设
您会很乐意假装提交832e8af
从未存在过,您希望在下列情况下登陆
* bb1d222 (HEAD, master, origin/master)
|
* 3293d35
然后(只有那时),你可以简单地做一个强制推动
git push --force origin master
请注意,强制推送通常被视为错误,例如crossing the streams。确保你真正想要做的事情;这样的操作很难逆转,并且有可能使你的贡献者(如果有的话)感到沮丧。
在大多数情况下,最好还原有问题的提交(使用git revert
),因为这与强制推送相反,不会删除历史记录,也不需要非快速推送
答案 1 :(得分:1)
1)在您的本地主服务器上,执行git reset HEAD~1
,然后执行git stash
。这会将您在bb1d222中所做的更改放入您的藏匿处。
2)将本地主分支重置为原点/主控(git reset --hard origin/master
)
3)在master上,执行git revert 832e8af
,这将引入一个新的提交,撤消你在832e8af中所做的更改。
4)git stash pop
您在bb1d222中对master进行的更改并提交它们。
这些步骤将生成此提交图,并且不会重写历史记录
* (Commit introducing changes in bb1d222)
|
* (Commit reverting changes made in 832e8af
|
* 832e8af
|
* 3293d35
答案 2 :(得分:0)
您有几个选择:
您可以创建separate local branch and commit your changes to that local branch only。我更喜欢这种方法,因为那时您的更改会安全地保存到该分支(除非您的计算机死机或删除了分支)。
使用git stash保存您的更改(您的差异可以这么说)。