2014-01-23 83 views
3

這已經有人問過,但不完全。如何返回一些提交,但仍在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 

我從Subversion遷移過來的,如果我想在顛覆做到這一點,這將是非常容易的。只需查看一下本地工作區的特定先前版本,然後提交即可。現在,你有所有以前的修訂,加上新的。

如何在git中完成此操作?

謝謝!

+0

「重新開始」是什麼意思?你的意思是從commit1創建一個新的分支並從那裏創建新的提交? – Gordolio

回答

4

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

git revert -n commit4 commit3 commit2 commit1 

會得到你的工作樹(和索引)回狀態在commit 1。之後,git commit將在commit 4之上創建一個新的提交,這會將您的樹更改回到commit 1

2

作爲一個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一個新的分支,並在目前的積分就提交你(如果你一直在下面,這是commit1)。

所以,現在如果你git checkout feature-Im-now-working-on,你沒有得到任何的commit2commit3,或commit4。如果你退出feature-I-was-working-on,你會得到那些。

現在,你在分支feature-Im-now-working-on,你做了更多的提交。這些提交不會進入feature-I-was-working-on,但您可以隨時返回。

但是,讓我們假設您現在想要將commit2,commit3commit4分成feature-Im-now-working-on。這很簡單!首先檢查出feature-Im-now-working-on,然後運行這個命令:

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

DVCSs比顛覆更爲複雜,但他們也更強大。如果你和他們一起工作,而不是與他們一起工作,他們可以讓你輕鬆完成你在Subversion中永遠不會想到的事情。

相關問題