亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Git權威指南--穿錯歷史

2019-11-10 19:19:10
字體:
來源:轉載
供稿:網友

0.查看版本庫最新五次提交

$ git log --stat --oneline -5e2609ca 加結束標志 test_git.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)1f5c128 此處省略一萬字 test_git.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)306b97b 增加修改時間 test_git.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)0c30d3e 增加修改人 test_git.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)07cab98 新增測試文件 test_git.txt | 1 + 1 file changed, 1 insertion(+)將最近兩次提交合二為一,并把提交說明改為“增加修改時間......”

1.使用--soft 參數 調用重置命令,回到最近兩次提交之前

$ git reset --soft HEAD^^2.查看版本庫最新提交

$ git log -1commit 306b97b5dc629cb428d664c50f31f7815ad370f0Author: yinnana <nanayin@creditease.cn>Date:   Wed Feb 8 13:14:10 2017 +0800    增加修改時間3.執行提交操作,即完成最新兩個提交壓縮為一個提交的操作

$ git commit -m "增加修改時間......"[master 060a9f4] 增加修改時間...... 1 file changed, 3 insertions(+), 1 deletion(-)4.查看提交日志,驗證

$ git log --stat --oneline -5060a9f4 增加修改時間...... test_git.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)306b97b 增加修改時間 test_git.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)0c30d3e 增加修改人 test_git.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)07cab98 新增測試文件 test_git.txt | 1 + 1 file changed, 1 insertion(+)66a5a9b modify test.txt test.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)

3.回到未來

涉及到的:揀選操作、變基操作、交互式變基操作

3.1  去除提交 D

0)對提交進行標識

$ git tag F$ git tag E HEAD^$ git tag D HEAD~2$ git tag C HEAD~3$ git tag B HEAD~4$ git tag A HEAD~5通過日志,可以看到被標記的六個提交

$ git log --oneline --decorate -62cbfc1b (HEAD -> master, tag: F) 添加正文e869230 (tag: E) 編輯文本內容6080809 (tag: D) 刪除 注意事項??!f94e582 (tag: C) 注意事項1af8a1c5 (tag: B) 添加 注意事項060a9f4 (tag: A) 增加修改時間......

1)執行git checkout ,暫時將HEAD頭指針切換到C(切換過程中顯示出于非跟蹤狀態的警告)

$ git checkout CNote: checking out 'C'.You are in 'detached HEAD' state. You can look around, make experimentalchanges and commit them, and you can discard any commits you make in thisstate without impacting any branches by performing another checkout.If you want to create a new branch to retain commits you create, you maydo so (now or later) by using -b with the checkout command again. Example:  git checkout -b <new-branch-name>HEAD is now at f94e582... 注意事項1
$ git log --oneline --decorate -6f94e582 (HEAD, tag: C) 注意事項1af8a1c5 (tag: B) 添加 注意事項060a9f4 (tag: A) 增加修改時間......306b97b 增加修改時間0c30d3e 增加修改人07cab98 新增測試文件

2)執行揀選操作將E提交在當前HEAD上重放。

因為E和master^顯然指向同一指向,因此可以用如下語法。

$ git cherry-pick master^[detached HEAD d8862cb] 編輯文本內容 Date: Wed Feb 8 13:32:28 2017 +0800 1 file changed, 1 insertion(+), 1 deletion(-)

3)執行揀選操作將F提交在當前HEAD上重放

F和master指向同一指向

$ git cherry-pick master[detached HEAD 5883cdd] 添加正文 Date: Wed Feb 8 13:33:14 2017 +0800 1 file changed, 3 insertions(+)

4)通過日志看到D不存在了

$ git log --oneline --decorate -65883cdd (HEAD) 添加正文d8862cb 編輯文本內容f94e582 (tag: C) 注意事項1af8a1c5 (tag: B) 添加 注意事項060a9f4 (tag: A) 增加修改時間......306b97b 增加修改時間

5)通過日志可以看出,最近兩次提交的原始創作日期(AuthorDate)和提交日期(CommitDate)不同。

AuthorDate是揀選提交的原始更改時間,CommitDate是揀選操作的時間

$ git log --PRetty=fuller --decorate -3commit 5883cddb3b5d8f5a88aec7eb1ce1ff616a9606e4 (HEAD)Author:     yinnana <nanayin@creditease.cn>AuthorDate: Wed Feb 8 13:33:14 2017 +0800Commit:     yinnana <nanayin@creditease.cn>CommitDate: Wed Feb 8 14:00:40 2017 +0800    添加正文commit d8862cbb1913ced14ce4c9441204019965751567Author:     yinnana <nanayin@creditease.cn>AuthorDate: Wed Feb 8 13:32:28 2017 +0800Commit:     yinnana <nanayin@creditease.cn>CommitDate: Wed Feb 8 13:58:16 2017 +0800    編輯文本內容commit f94e582809f7cc05bf5e8c9950dd32ebc4ac6ac4 (tag: C)Author:     yinnana <nanayin@creditease.cn>AuthorDate: Wed Feb 8 13:30:53 2017 +0800Commit:     yinnana <nanayin@creditease.cn>CommitDate: Wed Feb 8 13:30:53 2017 +0800    注意事項16)將master分支重置到新的提交ID(5883cdd)上

下面的切換操作使用了reflog的語法,即HEAD@{1}相當于切換回master分支前的HEAD指向

$ git checkout masterWarning: you are leaving 2 commits behind, not connected toany of your branches:  5883cdd 添加正文  d8862cb 編輯文本內容If you want to keep them by creating a new branch, this may be a good timeto do so with: git branch <new-branch-name> 5883cdd
$ git reset --hard HEAD@{1}HEAD is now at 5883cdd 添加正文

比較

2cbfc1b (HEAD -> master, tag: F) 添加正文e869230 (tag: E) 編輯文本內容6080809 (tag: D) 刪除 注意事項??!f94e582 (tag: C) 注意事項1af8a1c5 (tag: B) 添加 注意事項060a9f4 (tag: A) 增加修改時間......后**********5883cdd (HEAD -> master) 添加正文d8862cb 編輯文本內容f94e582 (tag: C) 注意事項1af8a1c5 (tag: B) 添加 注意事項060a9f4 (tag: A) 增加修改時間......306b97b 增加修改時間

3.2 合并 提交CD

0)將master分支重新置回到提交F上
$ git checkout masterAlready on 'master'
$ git reset --hard FHEAD is now at 2cbfc1b 添加正文
$ git log --oneline --decorate -62cbfc1b (HEAD -> master, tag: F) 添加正文e869230 (tag: E) 編輯文本內容6080809 (tag: D) 刪除 注意事項??!f94e582 (tag: C) 注意事項1af8a1c5 (tag: B) 添加 注意事項060a9f4 (tag: A) 增加修改時間......1)暫時將HEAD頭指針切換到D
$ git checkout DNote: checking out 'D'.You are in 'detached HEAD' state. You can look around, make experimentalchanges and commit them, and you can discard any commits you make in thisstate without impacting any branches by performing another checkout.If you want to create a new branch to retain commits you create, you maydo so (now or later) by using -b with the checkout command again. Example:  git checkout -b <new-branch-name>HEAD is now at 6080809... 刪除 注意事項??!2)悔棋兩次,以便將C和D融合
$ git reset --soft HEAD^^
$ git log --oneline --decorate -6af8a1c5 (HEAD, tag: B) 添加 注意事項060a9f4 (tag: A) 增加修改時間......306b97b 增加修改時間0c30d3e 增加修改人07cab98 新增測試文件66a5a9b modify test.txt3)提交,重用提交C的提交說明
$ git commit -C C[detached HEAD 670829a] 注意事項1 Date: Wed Feb 8 13:30:53 2017 +0800 1 file changed, 1 insertion(+), 1 deletion(-)4)執行揀選操作將E提交在當前HEAD上重放
$ git cherry-pick E[detached HEAD 133d8cf] 編輯文本內容 Date: Wed Feb 8 13:32:28 2017 +0800 1 file changed, 1 insertion(+), 1 deletion(-)5)執行揀選操作將F提交在當前HEAD上重放
$ git cherry-pick F[detached HEAD 2642edf] 添加正文 Date: Wed Feb 8 13:33:14 2017 +0800 1 file changed, 3 insertions(+)6)通過日志看到提交C和D融合,所以在日志中看不到C的標簽
$ git log --oneline --decorate -62642edf (HEAD) 添加正文133d8cf 編輯文本內容670829a 注意事項1af8a1c5 (tag: B) 添加 注意事項060a9f4 (tag: A) 增加修改時間......306b97b 增加修改時間7)將master分支指向新的提交ID(2642edf)下面的切換操作使用了reflog的語法,即HEAD@{1}相當于切換回master分支前的HEAD指向
$ git checkout masterWarning: you are leaving 3 commits behind, not connected toany of your branches:  2642edf 添加正文  133d8cf 編輯文本內容  670829a 注意事項1If you want to keep them by creating a new branch, this may be a good timeto do so with: git branch <new-branch-name> 2642edfSwitched to branch 'master'
$ git reset --hard HEAD@{1}HEAD is now at 2642edf 添加正文
$ git log --oneline --decorate -62642edf (HEAD -> master) 添加正文133d8cf 編輯文本內容670829a 注意事項1af8a1c5 (tag: B) 添加 注意事項060a9f4 (tag: A) 增加修改時間......306b97b 增加修改時間

3.3 rebase 變基操作

0)將master分支重新置回到提交F上
$ git checkout masterAlready on 'master'
$ git reset --hard FHEAD is now at 2cbfc1b 添加正文git rebase 可以實現將指定范圍的提交 嫁接到另一個提交之上命令格式:用法1:git rebase --onto <newbase><since> <till>用法2:git rebase --onto <newbase><since>用法3:git rebase <since><till>用法4:git rebase  <since>用法5:git rebase  -i ...用法6:git rebase --continue用法7:git rebase --skip用法8:git rebase --abort

用法6是在變基遇到沖突而暫停的情況下,先完成沖突解決(添加到暫存區,不提交),然后在恢復變基操作的時候使用該命令。

用法7是在變基遇到沖突而暫停的情況下,跳過當前提交的時候使用。

用法8是在變基遇到沖突而暫停的情況下,終止變基操作,回到之前的分支時候使用。

用法1為例,其用法如下:

git rebase --onto <newbase><since> <till>

1.首先會執行 git checkout 切換到 <till>

如果<till>指向 的不是一個分支(如master),則變基操作是在 detached HEAD(分離頭指針)狀態進行的,

當變基結束后,像上述3.1那樣,對master分支執行重置以實現變基結果在分支中生效。

2.將<since>...<till>所標識的提交范圍寫到一個臨時文件中

包括<till>的所有歷史提交排除<since>及<since>的歷史提交后形成的版本范圍

3.將當前分支強制重置(git reset --hard)到<newbase>

相當于執行git reset --hard <newbase>

4.從保存在臨時文件中的提交列表中,將提交逐一按順序重新提交到重置之后的分支上

5.如果遇到提交已經在分支中包含,則跳過該提交

6.如果在提交過程中遇到沖突,則變基過程暫停。

用戶解決沖突后,執行 git rebase --continue 繼續變基操作,

或者執行 git rebase --skip跳過此提交,

或執行 git rebase --abort就此終止變基操作切換到當前變基前的分支上

很顯然為了執行將E和F提交跳過提交D,嫁接到提交C上,可以執行如下變基命令:

git rebase --onto C E^ F

因為 E^ 等價于D,并且F和當前HEAD的指向相同,因此可以這樣:

git rebase --onto C D

$ git status -s -b## master
$ git log --oneline --decorate -62cbfc1b (HEAD -> master, tag: F) 添加正文e869230 (tag: E) 編輯文本內容6080809 (tag: D) 刪除 注意事項?。94e582 (tag: C) 注意事項1af8a1c5 (tag: B) 添加 注意事項060a9f4 (tag: A) 增加修改時間......


上一篇:Notes of Py for informatics 2

下一篇:TimeUtil

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
伊人一区二区三区久久精品| 国产性色av一区二区| 日韩中文字幕视频| 久久久久国产一区二区三区| 国产精品欧美日韩久久| 日韩av资源在线播放| 国产精品美女无圣光视频| 国产在线不卡精品| 久久精品国亚洲| 国产午夜精品一区二区三区| 精品视频在线播放免| 精品av在线播放| 国模视频一区二区| 久久久国产91| 久久久www成人免费精品| 国产精品久久久久99| 97国产精品久久| 久久久久久久久久久网站| 91视频88av| 欧美激情在线播放| 麻豆精品精华液| 国内精品久久久久影院 日本资源| 日韩欧美在线观看| 福利视频一区二区| 97视频在线观看免费高清完整版在线观看| 另类视频在线观看| 日韩中文在线不卡| 亚洲二区在线播放视频| 成人网址在线观看| 国产盗摄xxxx视频xxx69| 久久国产精品首页| 国产精品旅馆在线| 欧美激情亚洲综合一区| 亚洲精品自在久久| 精品毛片网大全| 欧美日韩午夜视频在线观看| 尤物九九久久国产精品的分类| 91精品久久久久久久久久入口| 国产亚洲一区二区在线| 亚洲a区在线视频| 91av在线网站| 91精品久久久久久久久不口人| 亚洲最新av在线| 91精品在线影院| 国产在线视频不卡| 欧美激情乱人伦一区| 在线看欧美日韩| 久久久久久免费精品| 久久亚洲影音av资源网| 日韩av免费一区| 欧美国产视频日韩| 97在线精品国自产拍中文| 亚洲高清在线观看| 日韩经典一区二区三区| 日韩精品免费在线视频观看| 国产亚洲一级高清| 亚洲a∨日韩av高清在线观看| 伊是香蕉大人久久| 日韩有码片在线观看| 国产精品久久久999| 久久久久久久久电影| 欧美激情喷水视频| 亚洲欧美一区二区精品久久久| 久久久精品中文字幕| 精品亚洲夜色av98在线观看| 国产成人精品久久二区二区| 亚洲欧洲一区二区三区久久| 欧美激情一区二区三区高清视频| 欧美视频在线看| 日本在线精品视频| 亚洲精品98久久久久久中文字幕| 国产精品视频播放| 中文字幕亚洲专区| 欧美剧在线观看| 日韩精品中文字| 色妞欧美日韩在线| 欧美小视频在线| 亚洲乱亚洲乱妇无码| 欧美在线一级视频| 亚洲综合色激情五月| 中文字幕精品一区久久久久| 97免费中文视频在线观看| 亚洲男人的天堂在线播放| 色中色综合影院手机版在线观看| 欧日韩不卡在线视频| 69**夜色精品国产69乱| 国产福利精品av综合导导航| 日本免费一区二区三区视频观看| 日韩精品免费在线视频观看| 欧美高清在线播放| 美女精品久久久| 91久久久国产精品| 亚洲福利视频免费观看| 久久久伊人欧美| 日本成人精品在线| 国产91色在线| 成人精品网站在线观看| 色在人av网站天堂精品| 国产999在线观看| 国产视频亚洲精品| 国产精品偷伦免费视频观看的| 欧美自拍大量在线观看| 综合网中文字幕| 欧美激情久久久久| 亚洲美女免费精品视频在线观看| 亚洲欧美在线磁力| 日本最新高清不卡中文字幕| 国产精品久久久久久久天堂| 亚洲欧美视频在线| 538国产精品一区二区在线| 成人久久久久久久| 日韩欧美中文免费| 国产欧美一区二区三区在线看| 久久精品视频网站| 国产精品久久久av久久久| 亚洲精品乱码久久久久久金桔影视| 亚洲淫片在线视频| 国产精品99蜜臀久久不卡二区| 欧美放荡办公室videos4k| 国产成人自拍视频在线观看| 性金发美女69hd大尺寸| 亚洲电影免费观看高清完整版在线| 色777狠狠综合秋免鲁丝| 91av在线播放视频| 狠狠躁天天躁日日躁欧美| 国产免费一区二区三区香蕉精| 国产精品久久久久久久久久99| 欧美激情videoshd| 欧美日韩国产精品一区二区三区四区| 91精品在线一区| 国产一区二区三区18| 日韩乱码在线视频| 国产精品91视频| 在线电影欧美日韩一区二区私密| 久久国产精品免费视频| 欧美成人午夜激情视频| www.久久久久久.com| 亚洲精品videossex少妇| 98精品国产高清在线xxxx天堂| 中文字幕av一区中文字幕天堂| 精品夜色国产国偷在线| 欧美国产日韩一区二区在线观看| 国产91成人在在线播放| 久久精品亚洲精品| 国产91色在线免费| 日本免费一区二区三区视频观看| 成人免费大片黄在线播放| 超碰91人人草人人干| 美女av一区二区三区| 热re99久久精品国产66热| 国产精品第一第二| 亚洲国产美女精品久久久久∴| 欧美精品第一页在线播放| 欧美黄色性视频| 久久99国产精品久久久久久久久| 日本电影亚洲天堂| 久久人人爽亚洲精品天堂| 神马久久久久久| 国模极品一区二区三区| 久久久最新网址| 中文字幕久久久av一区| 亚洲色图13p| 亚洲va久久久噜噜噜久久天堂| 亚洲午夜国产成人av电影男同|