![](/img/trans.png)
[英]Git checkout to a previous branch, do nothing, but why have something be staged?
[英]git branch and checkout does nothing?
我是git工作流程的新手(用於工作中的專有版本控制系統)。 我遵循了一些有關如何在本地創建分支,在此處進行更改的教程,所有這些都不會影響master。 這是我所做的:
git clone <url>
git checkout -b change_readme
git checkout master
但是現在在自述文件中可以看到相同的變化。
我以為我會重新掌握,應該沒有任何變化。 另外,如果我對master進行了更改,那么當我移回change_readme branch
時,也會進行相同的更改。 好像我從未做過任何分支一樣。
在步驟3)和4)之間,您沒有將更改添加到索引(使用git add
命令),也沒有在本地提交更改(使用git commit
),因此,更改未特別鏈接到分支。
您應該按照以下步驟操作:
git clone <url>
git checkout -b change_readme
git add .
git commit -m "Commit the change of Readme file"
git checkout master
如果要將更改推送到遠程change_readme
,請在步驟5)之后使用git push
命令。
請參閱veben的答案以獲取簡短的命令序列。
要了解實際情況,請注意,Git對執行源代碼版本控制有一些特殊的概念。 尤其是:
對Git重要的是提交 。 提交具有一些元數據,例如創建者,創建時間和原因(作者的日志消息)以及所有文件的完整快照。 提交通過難看的字母和數字字符串來識別。 這些稱為哈希ID ,有時也稱為SHA-1 ID(Git當前使用安全哈希算法1進行創建)或對象ID(OID)。 人們有時將它們稱為提交哈希 (當它們專門用於提交時-Git也將其用於其他用途)。
提交中的文件被凍結,並壓縮為特殊的僅Git形式。 (實際上,提交中的所有內容都是凍結的,您無法對其進行更改 ,只能將其解凍並制作一個新的改進的版本,並使用它代替舊的。這就是git commit --amend
所做的,實例。)由於它們采用的是僅Git形式,因此您需要一個工作場所。
因此,Git為您提供了一個工作樹 。 在這里,您的文件具有普通的日常格式。 您可以使用它們,對其進行編輯,替換它們,等等。 Git實際上並沒有使用太多這些文件,它只是提供了從提交中提取的文件。
Git從Git調用的內容( 索引 , 登台區域或緩存)進行新的提交,具體取決於Git的誰/什么部分進行調用。 索引很難看(您可以看到它,例如嘗試git ls-files --stage
,但是通常其中包含太多東西,無法以這種方式查看它)。 索引中的文件采用特殊的僅Git格式,可以隨時提交:幾乎但不是完全凍結。
您需要經常使用的git add
命令將文件從工作樹(您已經在工作的樹中復制,如果是新創建的文件)中復制到索引中。 如果有的話,它將替換以前的副本,或者第一次將新文件放入索引中。 現在可以提交了。
許多其他的Git命令也使用或操縱索引。 最明顯的是git commit
,它立即獲取索引中的所有內容並將其凍結為新的提交。 不太明顯的是git reset
,它取決於選項和標志,將文件從提交復制到索引,也可能復制到工作樹。 git checkout
命令也具有一種模式,該模式也將文件從提交復制到索引,然后再復制到工作樹,或者從索引復制到工作樹,而無需先退出提交。
當您使用git status
查看發生了什么時, git status
將當前(或HEAD
)提交與索引進行比較。 無論有什么不同,這里都會staged for commit
。 然后,它將索引與工作樹進行比較。 Whtaever 不同的是這里not staged for commit
。 因此,如果您進行了一些更改, 並使用git add
其復制到索引/登台區域中,則HEAD
vs index將顯示分階段的更改。 如果尚未使用git add
,則HEAD
vs index將什么都不顯示,但是index-vs-work-tree將顯示未暫存的更改。
索引通常是一種痛苦,人們可能希望Git像Mercurial(它不會打擾索引),但是它也可以讓您做一些花哨的技巧。 重要的是要知道每個文件都有三個副本:一個在HEAD
,一個在索引中,以及一個在工作樹中,而不只是凍結的HEAD
副本和可編輯的工作樹副本。
當您將更改提交到分支時,它們僅存在於該分支中,因此,如果切換到change_readme分支,則這些更改將不存在
如果要將在master中所做的更改添加到創建的分支中,請嘗試:
git push master : change_readme
如果要推送到遠程存儲庫,請嘗試:
git push master : change_readme
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.