麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

Git權威指南--穿錯歷史

2019-11-10 20:22:34
字體:
來源:轉載
供稿:網友

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 <[email protected]>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 <[email protected]>AuthorDate: Wed Feb 8 13:33:14 2017 +0800Commit:     yinnana <[email protected]>CommitDate: Wed Feb 8 14:00:40 2017 +0800    添加正文commit d8862cbb1913ced14ce4c9441204019965751567Author:     yinnana <[email protected]>AuthorDate: Wed Feb 8 13:32:28 2017 +0800Commit:     yinnana <[email protected]>CommitDate: Wed Feb 8 13:58:16 2017 +0800    編輯文本內容commit f94e582809f7cc05bf5e8c9950dd32ebc4ac6ac4 (tag: C)Author:     yinnana <[email protected]>AuthorDate: Wed Feb 8 13:30:53 2017 +0800Commit:     yinnana <[email protected]>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) 刪除 注意事項??!f94e582 (tag: C) 注意事項1af8a1c5 (tag: B) 添加 注意事項060a9f4 (tag: A) 增加修改時間......


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精国产品一区二区三区四季综 | 国产精品观看在线亚洲人成网 | 羞羞色在线观看 | wwwav国产 | 日本黄色大片免费 | 欧美乱淫| 精品久久www | 国产jjizz一区二区三区视频 | 日韩中文字幕一区二区三区 | 欧美性成人| 亚洲一区动漫 | 毛片在线免费 | 羞羞网站入口 | av在线等 | 热99re久久免费视精品频软件 | 亚洲精品tv久久久久久久久久 | 亚洲第一页在线观看 | 素人视频在线观看免费 | 久久国产免费 | 精品国产一区在线观看 | 久久免费视频8 | 中国黄色一级生活片 | 国产精品视频一区二区三区四 | 午夜色视频在线观看 | 在线 日本 制服 中文 欧美 | 久啪视频| 一级电影在线观看 | 末成年女av片一区二区 | 国产亚洲精品久久久久婷婷瑜伽 | 日韩视频―中文字幕 | 色淫视频 | 亚洲精品 在线播放 | 国产毛片网站 | 国产永久免费观看 | jizzyouxxxx | 乱淫67194 | 最新毛片在线观看 | av成人在线观看 | a网在线| 欧美成人一区二区视频 | 免费放黄网站在线播放 |