Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 受污染的远程主分支或防樱桃拾取_Git - Fatal编程技术网

Git 受污染的远程主分支或防樱桃拾取

Git 受污染的远程主分支或防樱桃拾取,git,Git,我遇到了远程存储库有一些“错误”提交的情况。 e、 g 其中A是坏的(但B是好的) 我希望遥控器变成 ... o ---- C ---- B origin/master \ A origin/dev 我不知道该怎么做 如果重新基准不合适,则需要不同的结果 ... o ---- C ---- A ---- B ---- ~A origin/master \

我遇到了远程存储库有一些“错误”提交的情况。 e、 g

其中A是坏的(但B是好的) 我希望遥控器变成

... o ---- C ---- B  origin/master 
                   \
                    A  origin/dev 
我不知道该怎么做

如果重新基准不合适,则需要不同的结果

... o ---- C ---- A ---- B ---- ~A origin/master 
                          \
                           -  origin/dev 
这导致dev分支包含提交,而master分支不包含提交。 经修订的问题是: 如何进行反樱桃采摘?
因此,与其生成将存储库从状态C更改为a的修补程序,不如应用将B更改为a的修补程序。

拉取,以便您在本地拥有相同的存储库

使用
git-rebase--interactive
(查看您是否不熟悉interactive-rebase)对A和B提交进行重新排序,以便现在

... o ---- o ---- B ---- A  master 
... o ---- o ---- B  master 
                   \
                    A  dev 
从该点签出新的分支开发,这样您就可以

... o ---- o ---- B ---- A  master, dev
切换到主分支,执行git reset--hard HEAD^将该分支倒带一次。你现在有

... o ---- o ---- B ---- A  master 
... o ---- o ---- B  master 
                   \
                    A  dev 
现在,
git push--force--all
你应该是金色的。(您需要
--force
,因为您正在远程存储库中重写历史记录,这很危险,如果其他开发人员已经从历史记录中删除了历史记录,则不建议这样做。)


完全删除本地更改和最后一次提交(从git历史记录和文件系统中,警告:更改无法恢复),如果您设法了解出了什么问题以及如何修复当前版本,并希望返回一次提交,则此功能将非常有用。

显然,共享存储库上的重基是不好的形式。在这种情况下,这是可以接受的。一般来说,虽然需要一个更通用的解决方案。反樱桃拾取被称为还原?以下是我自己的答案,无需使用
git reset
rebase
git revert --no-edit <git commit hash>
git revert --no-edit <git commit hash>
git cherry-pick -n  <git commit hash>
git reset --hard HEAD~1