簡體   English   中英

git branch和checkout什么都不做?

[英]git branch and checkout does nothing?

我是git工作流程的新手(用於工作中的專有版本控制系統)。 我遵循了一些有關如何在本地創建分支,在此處進行更改的教程,所有這些都不會影響master。 這是我所做的:

  1. git clone <url>
  2. git checkout -b change_readme
  3. 自述文件進行隨機更改。
  4. git checkout master

但是現在在自述文件中可以看到相同的變化。

我以為我會重新掌握,應該沒有任何變化。 另外,如果我對master進行了更改,那么當我移回change_readme branch時,也會進行相同的更改。 好像我從未做過任何分支一樣。

在步驟3)和4)之間,您沒有將更改添加到索引(使用git add命令),也沒有在本地提交更改(使用git commit ),因此,更改未特別鏈接到分支。

您應該按照以下步驟操作:

  1. git clone <url>
  2. git checkout -b change_readme
  3. 自述文件進行隨機更改。
  4. git add .
  5. git commit -m "Commit the change of Readme file"
  6. 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.

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