我的情况是这样的:
A-> B-> C-> d
A是我收到的代码的原始版本(它已经提交过,但在此处未提及)。
在B中,我应用了代码格式,引入了数百个空白更改。因此,审查代码的人发现了数千个由此引起的变更。虽然我知道在github上的提交url中添加?w = 1参数允许没有空格的代码差异,但是审阅者不接受这个并且告诉我简单地恢复到以前的格式。我认为处理这种情况的唯一方法是简单地从历史记录中删除C和D(本地和远程),然后再次进行更改。
我尝试了git revert,但这似乎暂时删除了远程更改。在下一次git推送之后,它会再次提交提交。
请建议正确的步骤,以便C,D在本地和远程完全从历史记录中删除,就像它们从未在那里一样(从而重写历史记录)。
注意:
我在MASTER分支上,我的本地仓库与遥控器完全同步。
修改:
我已经接受了link接受的回答。这是我做的:
git reset --hard HEAD~2
然后我做了git push origin HEAD --force
但是我得到了这个命令:
error: unable to push to unqualified destination: HEAD
如果我把master
代替HEAD,我会得到“一切都是最新的”。
我正在努力掌握,此时我只有一个工作分支。
答案 0 :(得分:3)
如果你已经把C和D推到了遥控器而其他人已经把它们捡起来了,那么如果没有机会造成大麻烦,你就无法做到。最好的办法是从git revert D
开始。这将创建一个新版本D',它看起来与C所处的状态相同。但D和D'仍将在git历史中。
如果这是你的愿望,你可以git revert C
,最后git revert B
。然后你的历史将看起来像A-B-C-D-D'-C'-B',并且检查B'将给你代码与检查A相同。
或者你可以告诉评论者把它搞砸并处理,因为所有这些都是***的主要痛苦。
答案 1 :(得分:1)
SELECT a.route FROM routes a LEFT JOIN arrivaltimes b ON a.stop_id = b.stop_id LEFT JOIN stops c ON a.stop_id = c.stop_id WHERE b.arrivaltime = ?
在B中,我应用了引入数百个空白变化的代码格式
审稿人不接受并告诉我恢复以前的格式
我认为处理这种情况的唯一方法是简单地从历史中删除C和D
如果我正确阅读此内容并且此处顶部的引号是有效负载,那么您想要的就是您从未完成open System.Windows.Forms
let form = new Form(Text="Test", TopMost=true)
let buttonNum0 = new Button(Text="1");
let buttonNum1 = new Button(Text="2", Top=20);
let buttonNum2 = new Button(Text="3", Top=40);
let buttonNum3 = new Button(Text="4", Top=60);
form.Controls.AddRange [| buttonNum0 ; buttonNum1; buttonNum2; buttonNum3 ; |]
let rec loop observable list = async{
printList list
(Async.Await)
let! somethingObservable = Async.AwaitObservable(observable)
match somethingObservable with
| 0 -> return! loop observable ("0"::list)
| 1 -> return! loop observable ("1"::list)
| 2 -> return! loop observable ("2"::list)
| 3 -> return! loop observable ("3"::list)
| _ -> return! loop observable ("?"::list)
}
module GUIInterface =
//Here we define what we will be observing (clicks)
let observables =
Observable.merge
<| Observable.map (fun _-> 0) GUI.buttonNum0.Click
<| Observable.map (fun _-> 1) GUI.buttonNum1.Click
<| Observable.map (fun _-> 2) GUI.buttonNum2.Click
<| Observable.map (fun _-> 3) GUI.buttonNum3.Click
Async.StartImmediate(loop GUIInterface.observables []) ; System.Windows.Forms.Application.Run(GUI.form)
时的历史记录。这就是A---B---C---D master
的用途。
B
是完整的拼写。它表示“从git rebase
开始提交主分支并将其中的所有更改应用到git rebase --onto $A $B master
,然后将$B
标签移动到新系列。这将产生
$A
如果沟通不是问题,这是处理单据的最佳方式。做坏事,强行推动新的历史,并让每个人都重新获得。如果他们的工作基于废弃的历史,他们也必须改变,但是:
如果没有人根据废弃的历史做任何工作,你就完成了。
答案 2 :(得分:1)
如果它看起来像&gt; b&gt; c&gt; d并且您想要摆脱最后2次提交, 只需使用:
git reset --hard HEAD~2
然后
git push --force
另一种选择是使用:
git reflog
将显示对存储库所做的更改列表。
接着是
git reset --hard HEAD@{n}
git push --force
其中n是分支中需要的最后一次提交。 另一种选择是使用
git revert c d
git push --force