Reset submodule to checkout state in git

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

บางครั้งอาจมีโมดูลย่อยหรือหลายโมดูลย่อยอยู่ภายในที่เก็บข้อมูล git หนึ่งที่เก็บ ในบางกรณี โมดูลย่อยอาจไม่ตรงกับสถานะการเช็คเอาต์ เนื่องจากไฟล์บางไฟล์ในโมดูลย่อยอาจมีการเปลี่ยนแปลงโดยไม่คาดคิด วิธีการรีเซ็ตโมดูลย่อยให้เหมือนกับสถานะการเช็คเอาต์ดั้งเดิม?

ลองยกตัวอย่างเช่นเรามีที่เก็บข้อมูล git A และมีโมดูลย่อยชื่อ ruby-gems อยู่ภายใน สมมติว่าโมดูลย่อยที่ต้นทางระยะไกลมีการยืนยัน 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

The truth about software development