簡體   English   中英

如何返回一些提交,但仍然在git中保留提交歷史記錄?

[英]How to go back a few commits, but still keep commit history in git?

這有點被問過,但不完全是。

這是我想知道的。

假設我有以下提交的git存儲庫:

$ git log
commit4
commit3
commit2
commit1

我現在意識到我需要將提交1返回到我的工作區並“重新開始”。 我可以做這個:

$ git reset --hard commit1

這將完成我想要的,但如果我再次查看日志:

$ git log
commit1

只顯示第一個提交。 我真正想看到的是:

$ git log
commit5-same-as-commit1
commit4
commit3
commit2
commit1

我來自顛覆,如果我想在顛覆中實現這一點,那將非常容易。 只需查看您本地工作區的特定先前修訂版,然后提交。 現在,您已經擁有了之前的所有修訂版本以及新修訂版本。

我如何在git中實現這一目標?

謝謝!

可能還有其他方法,但這是一個。

git revert -n commit4 commit3 commit2 commit1 

將您的工作樹(和索引)返回到commit 1處的狀態。 在那之后, git commit將在commit 4之上創建一個新的commit 4 ,它將把你的樹改回到commit 1

作為DVCS,Git不強制執行線性開發,而是強制有向圖。 這是我要做的,因為你想要保存其他提交:

$ git branch feature-I-was-working-on commit4

這會創建一個名為feature-I-was-working-on的分支,並將其指向commit4 這樣,您可以將此分支放在一邊,稍后再回過頭來。

$ git checkout commit1

這使得您的工作文件與commit1提交后的工作文件相同。

$ git checkout -b feature-Im-now-working-on

這將創建一個名為feature-Im-now-working-on的新分支,並將其指向您當前feature-Im-now-working-on提交(如果您一直在跟蹤,那就是commit1 )。

所以現在如果你git checkout feature-Im-now-working-on ,你不會得到任何commit2commit3commit4 如果您查看feature-I-was-working-on ,那么您就可以獲得這些功能。

現在,你正處於分支feature-Im-now-working-on ,你做了更多的提交。 那些提交沒有進入feature-I-was-working-on ,但你可以隨時回到它。

但是,讓我們說現在你想把commit2commit3commit4變成feature-Im-now-working-on 那很簡單! 首先檢查feature-Im-now-working-on ,然后運行此命令:

$ git merge feature-I-was-working-on

DVCS比Subversion更復雜,但它們也更強大。 如果你使用它們而不是反對它們,它們可以讓你輕松地做你在Subversion中從未想到過的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM