重置我的最后一个提交撤消许多提交

时间:2019-04-04 15:11:25

标签: git

我的本​​地分支有两次提交。一个是小的提交,其中一个文件已更改。另一个是合并,其中许多文件已更改。我想撤消两个提交,最后以分支历史中的第三个提交结束。

这是我尝试过的:

begin-procedure Run-Recursion

let #_Global_Counter = 0

let $Recursive_Line = ''

let $Data_Line_EMPL = ''

let $Data_Line_EMPL = $_BUSINESS_UNIT || '|' || $_BUSINESS_UNIT_DESCR || '|' || '2019' || '|' || 

$_EMPLID || '|' || $_NAME || '|' || $_DEPTID || '|' || $_DEPT_DECSR || '|' || $_JOBCODE || '|'

do Get-Recursive-Reports-To($Recursive_Line, $_POSITION_NBR, #_Global_Counter)

let $Data_Line_EMPL = $Data_Line_EMPL || $Recursive_Line

do Write-Data-Line($Data_Line_EMPL)

end-procedure

begin-procedure Get-Recursive-Reports-To(:$val_Data_Line, $val_Current_Position_Nbr, #Recursion_Counter)

let #Recursion_Counter = #Recursion_Counter + 1

do Get-the-ReportsTo-for-the-Current-Position($val_Current_Position_Nbr, $Next_Position_Nbr, $Next_EMPLID)

do Check-For-Stop($Stop_Recursion, $val_Current_Position_Nbr, $Next_Position_Nbr, #Recursion_Counter)

if $Stop_Recursion = 'N'

let $val_Data_Line = $val_Data_Line || $Next_EMPLID || '|'

do Get-Recursive-Reports-To($val_Data_Line, $Next_Position_Nbr, #Recursion_Counter)
end-if
end-procedure

begin-procedure Get-the-ReportsTo-for-the-Current-Position($_val_Position_NBR, :$var_ReportsTo, :$var_Next_EMPLID)
  let #local_counter = 0

begin-select
G.REPORTS_TO &G.Reports_to
 let $var_ReportsTo= &G.Reports_To

from PS_POSITION_DATA G
WHERE G.POSITION_NBR = $_val_Position_NBR
and G.EFF_STATUS = 'A'
AND (G.EFFDT = 
(SELECT MAX(G_ED.EFFDT) FROM PS_POSITION_DATA G_ED 
WHERE G.POSITION_NBR = G_ED.POSITION_NBR 
AND G_ED.EFFDT <= $_As_OF_Date))
end-select

begin-select
H.EMPLID &H.EMPLID
Z.NAME         &Z.NAME
 let $var_Next_EMPLID= &H.EMPLID
 let #local_counter = #local_counter + 1
from PS_JOB H !, PS_EMPLOYEES Z
WHERE H.POSITION_NBR = $var_ReportsTo
and H.EMPL_STATUS not in ('D', 'R', 'T')
and (H.EFFDT = 
        (SELECT MAX(H_ED.EFFDT) FROM PS_JOB H_ED 
          WHERE H.EMPLID = H_ED.EMPLID 
          AND H.EMPL_RCD = H_ED.EMPL_RCD 
          AND H_ED.EFFDT <= $_As_Of_Date))

end-select
  if #local_counter > 1
  let $var_Next_EMPLID = $local_counter  || ' ' || 'Employees in this Position'
  end-if

  if #local_counter = 0
  let $var_Next_EMPLID = 'Position Vacant'
  end-if

end-procedure

返回1次提交。当我再次运行它时,预期的行为是再返回一次提交。但是,当最后一次提交是合并操作时运行此命令时,似乎也撤消了最后〜10次提交。为什么是这样?有没有一种方法可以撤消合并提交而又不涉及任何其他提交?

5 个答案:

答案 0 :(得分:1)

如果您运行:

git log --graph --oneline -n 14

您的日志看起来像这样吗?

* xxxxx The top commit
* xxxxx merge commit
|\
| * aaaaa
| * bbbbb
| * ccccc
| * ddddd
| * eeeee
| * fffff
| * 11111
| * 22222
| * 33333
| * 44444
|/
* yyyyyy The commit where you ended up after the 2nd `reset`

如果是这样,如果我理解得很好,您希望您的分支以aaaaaa结尾,是吗?

在这种情况下,您可以执行以下操作:

git reset --hard aaaaa

您的分支将包含10个提交

答案 1 :(得分:0)

要返回提交并取消对更改的取消操作,请删除--hardgit reset <sha_of_parent>
要获取以前的更改,请回到git reflog

答案 2 :(得分:0)

git revert SHA

允许您重置提交。 SHA指定要还原的提交。

答案 3 :(得分:0)

<someCommit>^表示将someCommit第一个父对象混入,这对于“正常”(即非合并)提交意味着 the 父提交。

但是,当HEAD指向合并提交时,您必须指定要返回的两个父母中的哪个。

A     B
 \   /
  \ /
   C <<< HEAD (merge commit)
  • HEAD是指C
  • HEAD^HEAD^1指的是A
  • HEAD^2是指B

文档(git help rev-parse)定义了<rev>^的含义。

答案 4 :(得分:0)

我最终做了以下事情:

git reset --hard abcdef 

abcdef是合并之前的提交哈希。