Reset submodule to checkout state in git

  sonic0002        2020-09-05 08:30:57       23,321        0          English  简体中文  繁体中文  ภาษาไทย  Tiếng Việt 

有時一個 git 儲存庫內會有子模組或一些子模組,在某些情況下,子模組可能與簽出狀態不同步,因為子模組中的一些檔案可能會意外更改。如何將子模組重置為與原始簽出狀態相同?

讓我們舉個例子,我們有一個 git 儲存庫 A,其中有一個名為 ruby-gems 的子模組。假設遠端 origin 上的子模組具有提交 a

在我們的本地環境中,儲存庫 A 有子模組的最新提交,這導致一些差異。

$ git diff
diff --git a/web-api/ruby-gems b/web-api/ruby-gems
index 0359dc84d..8a711275a 160000
--- a/web-api/ruby-gems
+++ b/web-api/ruby-gems
@@ -1 +1 @@
-Subproject commit 0359dc84d22adf0e131165b72b3209318605dfe3
+Subproject commit 8a711275a4c34bd8cc22b07894931fa1743c5707

現在我們想將儲存庫 A 的子模組提交重置回 0359dc84d22adf0e131165b72b3209318605dfe3,以便本地和遠端儲存庫之間沒有差異。

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
	modified:   web-api/ruby-gems (new commits)

no changes added to commit (use "git add" and/or "git commit -a")

如果我們只執行 git reset --hard 可能無法運作,在这种情况下,我们可以运行 git submodule 命令将子模组重置为其签出状态。

$ git submodule update --init
Submodule path 'web-api/ruby-gems': checked out '0359dc84d22adf0e131165b72b3209318605dfe3'

從上面的輸出,子模組狀態已恢復到其簽出狀態。可以在上面之後使用以下命令驗證它。

$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

如果有多個子模組並想要將所有子模組狀態重置為簽出狀態,可以執行以下命令。

git submodule foreach --recursive git submodule update --init

程式設計愉快。

GIT RESET  GIT SUBMODULE 

       

  RELATED


  0 COMMENT


No comment for this article.



  RANDOM FUN

What happens when using low memory RAM