成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Git提交錯了不用慌,這三招幫你修改記錄

系統 Linux
大家好,今天我們來聊聊git當中一個很重要的功能——歷史記錄的修改。

 

大家好,今天我們來聊聊git當中一個很重要的功能——歷史記錄的修改。

有的時候我們會突然發現某個地方需要修改,最常見的某個不應該被提交的文件被提交了進來。我們希望它不只是在后續的版本當中不再出現,而是希望整個從git倉庫當中移除掉。這個時候我們就需要修改git之前的歷史記錄。這個時候應該怎么辦呢?

不要著急,git當中有很多的手段可以修改之前的歷史提交記錄。

修改最后一次提交

這一點我們在之前的文章當中曾經提到過,如果我們只是想要修改最后一次的提交記錄,這是比較簡單的。我們只需要直接修改我們想要修改的部分,在提交的時候加上一個參數--amend即可。

  1. git commit --amend 

amend的意思是補丁,它可以把我們這一次的修改合并到上一條歷史記錄當中,而不會產生一個新的commit記錄。運行之后,它會打開一個vim編輯器,我們還可以修改上一次commit時輸入的提示信息。

我們使用git log檢查的話,會發現歷史記錄的修改時間還是上一次的時間。看起來就好像什么也沒有發生過一樣,悄無聲息地就改掉了。

修改多個信息

--amend雖然好用,但是它只能修改最后一次的提交信息,如果我們想要修改的提交記錄在那之前,我們應該怎么辦呢?

git當中并沒有提供直接的工具來實現這一點,不過我們可以使用rebase來達成。我們可以加上-i進行交互式地變基,我們可以在任何想要的修改完成之后停止,也可以添加文件或者是做其他想要做的事情。但是我們變基的目標不是某一個分支而是當前分支的某一個歷史節點,所以我們需要提供一個具體的commitid或者是指針位置。

git rebase -i的功能非常強大,我們幾乎可以使用它來完成所有一切我們想要完成的事情。

比如我們想要修改倒數第二次提交,我們可以執行git rebase -i HEAD~3。也就是以倒數第三個節點作為基準節點執行變基,這時候git會進入一個vim窗口,在這個窗口當中我們可以看到最近的三次提交記錄。

首先我們可以看到上面的三行就是我們可以修改的三個commit,分別展示的是要執行的操作以及commitid以及commit message。這里的操作默認的是pick,也就是使用該commit。關于我們可以執行的操作git在下方也給了充分的提示,其中比較常用的有pick、edit以及squash。

這一次我們想要做的是修改提交記錄,所以我們應該執行edit,我們把想要修改的commit前的pick改成edit。比如這樣:

退出之后,git會自動帶我們回到我們選擇edit的分支提交之后的版本。我們進行我們想要的修改,這里我在第15篇文章當中加上了一行:嘗試rebase。之后再使用git add以及git commit --amend進行修改提交結果。

再之后我們執行git rebase --continue,把剩下要應用的變更應用完成。

一切都結束之后,我們可以使用一下git show命令查看一下我們修改的bee9ce3這個commit的記錄。可以看到已經多了這一行,說明我們的修改成功了。

順序變更、合并、拆分

順序變更

我們不僅可以修改某一次commit當中的內容,還可以修改這些commit的相對順序,以及可以讓它們合并以及拆分。

修改順序其實很簡單,我們只需要人為地修改rebase -i之后彈出的vim文件即可。比如說原本的記錄是:

  1. pick A change A 
  2. pick B change B 
  3. pick C change C 

如果我們想要更換順序,我們只需要修改這個文件即可。比如變成:

  1. pick B change B 
  2. pick A change A 
  3. pick C change C 

那么當我們在退出vim的時候,git會首先應用B commit的變更,再應用A最后應用C。

合并

除此之外,我們還可以合并多個commit記錄成一個。操作的方法也很簡單,就是我們只需要把pick修改成squash。git會自動把所有squash的commit記錄合并在一起。

  1. pick A change A 
  2. squash B change B 
  3. squash C change  

拆分

有的時候一個commit非常巨大,我們可能也會想要將它拆分,其實操作也很簡單。比如我們想要把commit B拆分成兩條,首先,我們在rebase的時候將commit B前面的pick修改成edit。

  1. pick A change A 
  2. edit B change B 
  3. pick C change C 

當我們退出的時候,我們會進入到B commit剛剛提交完的狀態。由于我們要做的是拆分B這個提交,所以我們需要執行git reset HEAD^,把上一次提交重置。然后再分別add我們想要拆分開來提交的文件。

整個操作如下:

  1. git reset HEAD^ 
  2. git add test/* 
  3. git ci -m 'add test' 
  4. git add code/* 
  5. git ci -m 'update code' 
  6. git rebase --continue 

這樣我們就把commit B拆分成了兩個commit插入到了歷史記錄當中了。

最后的最后,大家需要注意,雖然這些手段在修改記錄的時候非常好用。但是如果這些commit已經被提交到了遠程,我們是不可以直接git push同步的。因為git會校驗我們提交的hash值,發現對不上之后會禁止我們的提交。所以如果想要提交到遠程的話,只能使用git push -f強制覆蓋。但是這是一個非常非常危險的操作,如果你git push -f了,沒有人會知道你到底修改了什么,只建議在自己獨有的分支上如此操作,一定一定要謹慎使用。

本文轉載自微信公眾號「TechFlow」,可以通過以下二維碼關注。轉載本文請聯系TechFlow公眾號。

 

責任編輯:武曉燕 來源: TechFlow
相關推薦

2022-05-20 08:18:24

Git存儲哈希值

2009-11-11 17:02:01

ADO修改記錄

2020-10-09 18:41:23

DDoS攻擊黑客網絡安全

2016-08-05 15:36:36

2019-01-04 08:00:59

Linux硬件容器

2022-05-02 08:30:46

網絡Wi-Fi

2012-09-24 11:06:39

社交產品創業創業秘訣

2017-09-14 11:49:21

內存攢機存儲

2014-07-28 16:13:19

Gitlinux開源

2019-10-28 13:57:54

Windows 10Windows電腦性能

2018-02-01 08:02:50

運營商4G流量

2021-01-04 13:25:10

Git開源工具

2020-11-17 12:54:56

Python代碼開發

2025-03-18 10:25:59

2020-11-02 08:21:50

Git辦法代碼

2009-08-17 08:33:00

Visual C#數據

2021-01-06 10:26:17

電腦WindowsWindows 10

2010-07-14 16:36:46

修改Telnet

2021-05-20 08:00:00

代碼開發工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产日韩一区二区三免费高清 | 一区二区三区视频在线观看 | 精品一区二区三区中文字幕 | 91国内精品 | 国产精品亚洲一区 | 日本在线看 | 九色www | 好姑娘影视在线观看高清 | 中文字幕精品一区二区三区精品 | 亚洲福利网站 | 少妇黄色 | 精品欧美一区二区三区免费观看 | 日韩精品一区二区三区在线观看 | 亚洲精品成人在线 | 老牛影视av一区二区在线观看 | 亚洲乱码国产乱码精品精98午夜 | 亚洲精品一二三 | 久久久久亚洲精品 | 米奇狠狠鲁 | 日韩国产精品一区二区三区 | 91精品一区二区三区久久久久久 | 亚洲 欧美 综合 | 先锋资源在线 | 国产欧美日韩精品一区 | www.亚洲 | 久久狠狠| 精品视频在线免费观看 | 日韩中文字幕av | 国产在线精品一区二区 | 久久99精品久久久久久噜噜 | 夜夜夜久久久 | 欧美一级大片免费观看 | 国产精品成人一区 | 亚洲综合精品 | 国产精品自拍视频 | 国产在线视频一区二区董小宛性色 | 97av视频| 国产精品一区二区三区在线 | 亚洲精品视频在线播放 | 久久久久久国 | 国产精品久久久久久久久久不蜜臀 |