ฉันจะเลิกทำการ 'เพิ่มคอมไพล์' ก่อนที่จะส่งได้อย่างไร?


8960

ฉันเพิ่มไฟล์ไปยัง Git โดยไม่ตั้งใจโดยใช้คำสั่ง:

git add myfile.txt

git commitฉันยังไม่ได้ทำงานเลย มีวิธีการยกเลิกการทำเช่นนี้ดังนั้นไฟล์เหล่านี้จะไม่รวมอยู่ในการกระทำ?


22
เริ่มต้นด้วย Git v1.8.4 คำตอบด้านล่างทั้งหมดที่ใช้HEADหรือheadสามารถใช้@ในสถานที่ของHEADแทน ดูคำตอบนี้ (ส่วนสุดท้าย)เพื่อเรียนรู้ว่าทำไมคุณสามารถทำเช่นนั้น

3
ฉันทำหน้าร้อนเล็กน้อยซึ่งแสดงทุกวิธีในการเลิกไฟล์: stackoverflow.com/questions/6919121//
Daniel Alder

5
ทำไมไม่เช็คเอาต์คอมไพล์?
Erik Reppen

13
@ErikReppen git checkoutไม่ได้ลบการเปลี่ยนแปลงแบบ staged ออกจากดัชนีการกระทำ มันย้อนกลับการเปลี่ยนแปลงที่ไม่มีการจัดฉากเป็นการแก้ไขครั้งล่าสุดซึ่งไม่ได้เป็นอย่างที่ฉันต้องการฉันต้องการการเปลี่ยนแปลงเหล่านั้นฉันแค่ต้องการให้พวกเขาทำในภายหลัง
paxos1977

4
หากคุณใช้ Eclipse จะเป็นการง่ายเหมือนการยกเลิกการเลือกไฟล์ในกล่องโต้ตอบการส่งข้อความ
Hamzahfrq

คำตอบ:


10366

คุณสามารถเลิกทำgit addก่อนกระทำการ

git reset <file>

ซึ่งจะลบออกจากดัชนีปัจจุบัน (รายการ "กำลังจะเกิดขึ้น") โดยไม่เปลี่ยนแปลงสิ่งใด

คุณสามารถใช้ได้

git reset

ไม่มีชื่อไฟล์ใด ๆ เพื่อยกเลิกการเปลี่ยนแปลงเนื่องจากครบกำหนดทั้งหมด สิ่งนี้มีประโยชน์เมื่อมีไฟล์จำนวนมากเกินกว่าจะแสดงทีละรายการในระยะเวลาที่เหมาะสม

ใน Git เวอร์ชันเก่าคำสั่งข้างต้นจะเทียบเท่าgit reset HEAD <file>และgit reset HEADตามลำดับและจะล้มเหลวหากHEADไม่ได้กำหนด (เพราะคุณยังไม่ได้ทำคอมมิชชันในที่เก็บของคุณ) หรือคลุมเครือ (เพราะคุณสร้างสาขาที่เรียกว่าHEADซึ่งเป็นสิ่งที่โง่ ที่คุณไม่ควรทำ) อย่างไรก็ตามการเปลี่ยนแปลงนี้ใน Git 1.8.2ดังนั้นใน Git รุ่นทันสมัยคุณสามารถใช้คำสั่งด้านบนก่อนที่จะทำการคอมมิทครั้งแรก:

"git reset" (ไม่มีตัวเลือกหรือพารามิเตอร์) ที่ใช้ในการแก้ไขข้อผิดพลาดเมื่อคุณไม่มีข้อผูกพันใด ๆ ในประวัติของคุณ แต่ตอนนี้มันให้ดัชนีว่างเปล่า (เพื่อให้ตรงกับการกระทำที่ไม่มีอยู่จริงที่คุณไม่ได้ทำ)


92
แน่นอนว่านี่ไม่ใช่การเลิกทำจริงเพราะหากมีการgit addเขียนทับรุ่นที่ไม่ได้รับการเผยแพร่ก่อนหน้านี้ผิดเราจะไม่สามารถกู้คืนได้ ฉันพยายามอธิบายเรื่องนี้ในคำตอบด้านล่าง
leonbloy

7
git reset HEAD *.extที่extเป็นไฟล์นามสกุลที่กำหนดที่คุณต้องการ unadd สำหรับฉันมัน*.bmp&*.zip
boulder_ruby

18
@Jonny ดัชนี (พื้นที่ aka การแสดงละคร) มีทุกไฟล์ที่ไม่ได้ไฟล์เพิ่งเปลี่ยน มัน "เริ่มชีวิต" (เมื่อคุณตรวจสอบการกระทำหรือโคลน repo) เป็นสำเนาของไฟล์ทั้งหมดในการกระทำที่ชี้ไปที่หัวโดย ดังนั้นหากคุณลบไฟล์ออกจากดัชนี ( git rm --cached) หมายความว่าคุณกำลังเตรียมที่จะคอมมิทที่ลบไฟล์นั้น git reset HEAD <filename>ในทางกลับกันจะคัดลอกไฟล์จาก HEAD ไปยังดัชนีดังนั้นการส่งครั้งต่อไปจะไม่แสดงการเปลี่ยนแปลงใด ๆ กับไฟล์นั้น
สัญลักษณ์แทน

11
ฉันเพิ่งค้นพบว่ามีความเป็นไปได้เช่นเดียวกับgit reset -p git add -pนี่มันเจ๋งมาก!
donquixote

10
คุณสามารถกู้คืนการเขียนทับก่อนหน้านี้ แต่ไม่ได้รับการแก้ไขแต่ไม่ใช่ด้วยวิธีที่เป็นมิตรกับผู้ใช้และไม่ปลอดภัย 100% (อย่างน้อยฉันไม่พบ): goto .git / objects ค้นหาไฟล์ที่สร้างในเวลาที่git addคุณต้องการกู้คืน ( 61/3AF3...- > object id 613AF3...) จากนั้นgit cat-file -p <object-id>(อาจคุ้มค่ากับการกู้คืนการทำงานเป็นเวลาหลายชั่วโมง แต่ก็เป็นบทเรียนที่จะทำให้บ่อยครั้งขึ้น ... )
Peter Schneider

2151

คุณต้องการ:

git rm --cached <added_file_to_undo>

เหตุผล:

เมื่อฉันยังใหม่กับสิ่งนี้ฉันพยายามครั้งแรก

git reset .

(เพื่อยกเลิกการเพิ่มเริ่มต้นของฉันทั้งหมด) เพียงเพื่อรับข้อความนี้ (ไม่ได้) ข้อความที่เป็นประโยชน์:

fatal: Failed to resolve 'HEAD' as a valid ref.

ปรากฎว่าสิ่งนี้เป็นเพราะการอ้างอิง HEAD (กิ่ง?) ไม่มีอยู่จนกระทั่งหลังจากกระทำครั้งแรก นั่นคือคุณจะพบกับปัญหาของผู้เริ่มต้นเช่นเดียวกับฉันหากเวิร์กโฟลว์ของคุณเช่นของฉันเป็นสิ่งที่ต้องการ:

  1. cd ไปยังไดเร็กตอรี่โปรเจคใหม่ที่ยอดเยี่ยมของฉันเพื่อทดลองใช้ Git ความนิยมใหม่
  2. git init
  3. git add .
  4. git status

    ... จำนวนมากอึเลื่อน ...

    => ประณามฉันไม่ต้องการที่จะเพิ่มทั้งหมด

  5. google "เลิกทำการเพิ่ม git"

    => ค้นหา Stack Overflow - yay

  6. git reset .

    => ร้ายแรง: ไม่สามารถแก้ไข 'HEAD' เป็นข้อมูลอ้างอิงที่ถูกต้อง

มันกลับกลายเป็นว่ามี ข้อผิดพลาดที่บันทึกไว้กับความไม่ช่วยเหลือนี้ในรายการส่งจดหมาย

และนั่นเป็นทางออกที่ถูกต้องในสถานะ Git (ซึ่ง, ใช่, ฉันคัดสรรเป็น 'อึ)

...
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
...

git rm --cached FILEและการแก้ปัญหาจริงคือการใช้งาน

หมายเหตุ: คำเตือนที่อื่น ๆ ที่นี่ - git rmลบสำเนาการทำงานภายในประเทศของคุณไฟล์ แต่ไม่ได้ถ้าคุณใช้--cached นี่คือผลลัพธ์ของgit help rm :

--cached ใช้ตัวเลือกนี้เพื่อ unstage และลบเส้นทางจากดัชนีเท่านั้น ไฟล์แผนผังการทำงานไม่ว่าจะถูกแก้ไขหรือไม่ก็ตามจะถูกทิ้งไว้

ฉันใช้ต่อไป

git rm --cached .

เพื่อลบทุกอย่างและเริ่มใหม่อีกครั้ง ใช้งานไม่ได้เพราะในขณะที่add .เรียกซ้ำจะเปิดใช้งานrmจำเป็นต้องเรียก-rเก็บเงิน ถอนหายใจ

git rm -r --cached .

โอเคตอนนี้ฉันกลับไปที่ที่ฉันเริ่มแล้ว ครั้งต่อไปฉันจะใช้-nในการทำแห้งและดูว่าจะเพิ่มอะไร:

git add -n .

ฉันซิปขึ้นทุกอย่างไปยังที่ปลอดภัยก่อนที่จะไว้วางใจgit help rmในสิ่งที่--cachedไม่ทำลาย (และถ้าฉันสะกดผิด)


15
ฮะ ฉันทำตามกระบวนการเดียวกันนี้แล้ว ยกเว้นผมให้ขึ้นและกล่าวว่าrm -rf .git, git initเพราะผมไม่ได้ให้ความไว้วางใจgit rm --cachedในการเก็บสำเนาการทำงานของฉัน มันบอกว่าเล็กน้อยสำหรับวิธี git ยังคงซับซ้อนเกินไปในบางแห่ง git unstageควรเป็นคำสั่งมาตรฐานของหุ้นฉันไม่สนใจว่าฉันจะเพิ่มเป็นชื่อแทนได้หรือไม่
Adrian Macneil

5
สำหรับฉัน git พูดว่าgit reset HEAD <File>...
drahnr

16
git rm --cached <file> จริง ๆ แล้วเป็นคำตอบที่ถูกต้องถ้าเป็นการนำเข้าเริ่มต้นของ <file> ลงในที่เก็บ หากคุณกำลังพยายามยกเลิกการเปลี่ยนแปลงไฟล์การรีเซ็ต git เป็นคำตอบที่ถูกต้อง ผู้คนที่บอกว่าคำตอบนี้ผิดกำลังคิดถึงคำถามที่แตกต่าง
Barry Kelly

14
สิ่งนี้จะใช้งานได้จริง แต่เฉพาะในการคอมมิทครั้งแรกโดยที่ไฟล์นั้นไม่เคยมีมาก่อนหรือตำแหน่งที่git addคำสั่งเพิ่มไฟล์ใหม่แต่ไม่เปลี่ยนแปลงไฟล์ที่มีอยู่
naught101

4
เพียงแค่ไปเพื่อแสดงให้เห็นว่าคอมไพล์ไม่ซับซ้อนและซับซ้อนเป็นอย่างไร แทนที่จะต้องมีคำสั่ง "เลิกทำ" แบบขนานคุณต้องค้นหาวิธีเลิกทำ เช่นพยายามที่จะปลดปล่อยขาของคุณในทรายอย่างรวดเร็วจากนั้นติดแขนของคุณแล้วทำให้แขนอีกข้างของคุณติดอยู่ ... ทุกคำสั่งควรทำผ่าน GUI ด้วยรายการเมนูแบบหล่นลงสำหรับตัวเลือก ... คิดถึง UI ทั้งหมด ผลผลิตเพิ่มขึ้นเรามี แต่เรามีระเบียบของอินเตอร์เฟสบรรทัดคำสั่งย้อนยุคนี้ มันไม่เหมือนโปรแกรม git GUI ที่ทำให้มันใช้งานง่ายขึ้น
ahnbizcad

532

หากคุณพิมพ์:

git status

Git จะบอกคุณว่าฉากใดบ้าง ฯลฯ รวมถึงคำแนะนำเกี่ยวกับขั้นตอนการทำเวที:

use "git reset HEAD <file>..." to unstage

ฉันพบว่า Git ทำหน้าที่ได้ดีมากในการผลักดันให้ฉันทำสิ่งที่ถูกต้องในสถานการณ์เช่นนี้

หมายเหตุ: เวอร์ชัน Git ล่าสุด (1.8.4.x) มีการเปลี่ยนแปลงข้อความนี้:

(use "git rm --cached <file>..." to unstage)

19
ข้อความจะแตกต่างกันไปขึ้นอยู่กับว่าaddไฟล์ ed ถูกติดตามอยู่หรือไม่ ( addเฉพาะรุ่นใหม่ที่บันทึกไว้ในแคช - ที่นี่จะแสดงข้อความของคุณ) ที่อื่นหากไฟล์ไม่ได้ถูกจัดฉากไว้ก่อนหน้านี้ไฟล์จะแสดงขึ้นมาuse "git rm --cached <file>..." to unstage
leonbloy

ที่ดี! git reset HEAD <file>หนึ่งเป็นเพียงคนเดียวที่จะทำงานในกรณีที่คุณต้องการที่จะ unstage ไฟล์ลบ
skerit

2
git เวอร์ชั่น 2.14.3 ของฉันบอกว่าไม่git reset HEADเสถียร
SilverWolf - Reinstate Monica

246

หากต้องการชี้แจง: git addย้ายการเปลี่ยนแปลงจากไดเร็กทอรีการทำงานปัจจุบันไปยังพื้นที่การจัดเตรียม (ดัชนี)

กระบวนการนี้เรียกว่าการแสดงละคร ดังนั้นคำสั่งเป็นธรรมชาติมากที่สุดที่จะเป็นเวทีการเปลี่ยนแปลง (แฟ้มการเปลี่ยนแปลง) เป็นที่เห็นได้ชัดที่หนึ่ง:

git stage

git add เป็นเพียงนามแฝงที่ง่ายต่อการพิมพ์ git stage

สงสารไม่มีgit unstageมิได้git unaddคำสั่ง สิ่งที่เกี่ยวข้องนั้นยากที่จะคาดเดาหรือจำได้ แต่ก็ค่อนข้างชัดเจน:

git reset HEAD --

เราสามารถสร้างนามแฝงสำหรับสิ่งนี้ได้อย่างง่ายดาย:

git config --global alias.unadd 'reset HEAD --'
git config --global alias.unstage 'reset HEAD --'

และในที่สุดเรามีคำสั่งใหม่:

git add file1
git stage file2
git unadd file2
git unstage file1

ส่วนตัวฉันใช้นามแฝงที่สั้นกว่า:

git a # For staging
git u # For unstaging

3
"ย้าย"? สิ่งนี้จะบ่งบอกว่ามันหายไปจากไดเรกทอรีการทำงาน นั่นไม่ใช่กรณี
โทมัสเวลเลอร์

4
ทำไมมันชัดเจน?
Lenar Hoyt

ที่จริงแล้วgit stageนามแฝงสำหรับgit addซึ่งเป็นคำสั่งทางประวัติศาสตร์ทั้งใน Git และ SCM อื่น ๆ มันถูกเพิ่มเข้ามาในเดือนธันวาคม 2551 ด้วยความมุ่งมั่นที่ 11920d28da ใน "พื้นที่เก็บข้อมูลคอมไพล์ของ Git" ถ้าฉันสามารถพูดได้
Obsidian

1
สิ่งนี้อาจไม่เกี่ยวข้อง แต่ฉันพบว่าการตรวจสอบไฟล์ก่อนที่จะเพิ่มให้เป็นความคิดที่มีประโยชน์บางอย่างเช่นชื่อไฟล์คำสั่งตรวจสอบ && git เพิ่มชื่อไฟล์ฉันเปลี่ยน git ด้วย g ที่สั้นกว่าในเครื่องของฉัน ตกลงสำหรับฉัน: github.com/dataf3l/gฉันไม่รู้ว่านี่จะเป็นประโยชน์กับใครบางคนหรือไม่ แต่ฉันจะใส่ไว้ที่นี่ด้วยความหวังว่าจะช่วยประหยัดเวลาของบางคน
Felipe Valdes

167

นอกเหนือจากคำตอบที่ยอมรับแล้วหากไฟล์ที่เพิ่มผิดพลาดของคุณมีขนาดใหญ่มากคุณอาจสังเกตเห็นว่าแม้หลังจากลบไฟล์นั้นออกจากดัชนีด้วย ' git reset' แล้วก็ยังดูเหมือนว่าจะมีพื้นที่ว่างใน.gitไดเรกทอรี

นี่คือไม่มีอะไรต้องกังวลเกี่ยวกับ; ไฟล์ยังคงอยู่ในที่เก็บ แต่เป็นเพียง "วัตถุหลวม" มันจะไม่ถูกคัดลอกไปยังที่เก็บอื่น ๆ (ผ่านการโคลน, การพุช) และในที่สุดพื้นที่จะถูกเรียกคืน - แม้ว่าอาจจะไม่เร็ว ๆ นี้ หากคุณกังวลคุณสามารถเรียกใช้:

git gc --prune=now

อัปเดต (สิ่งต่อไปนี้คือความพยายามของฉันในการกำจัดความสับสนบางอย่างที่อาจเกิดขึ้นจากคำตอบที่ upvoted ที่สุด):

ดังนั้นซึ่งเป็นจริงเลิกทำของgit add?

git reset HEAD <file> ?

หรือ

git rm --cached <file>?

พูดอย่างเคร่งครัดและถ้าฉันไม่ผิด: ไม่มี

git add ไม่สามารถยกเลิกได้ได้อย่างปลอดภัยโดยทั่วไป

ลองนึกถึงสิ่งแรกที่ควรgit add <file>ทำ:

  1. หาก<file>ได้รับไม่ได้ติดตามก่อนหน้านี้ , git add จะเพิ่มไปยังแคชที่มีเนื้อหาปัจจุบัน

  2. หาก<file>ได้รับการติดตามแล้ว , git add บันทึกเนื้อหาปัจจุบัน (ภาพรวมรุ่น) ไปยังแคช ใน Git การกระทำนี้ยังคงเรียกว่าเพิ่ม (ไม่ใช่แค่อัปเดต ) เนื่องจากสองเวอร์ชันที่แตกต่างกัน (สแนปชอต) ของไฟล์ถือเป็นสองรายการที่แตกต่างกัน: ดังนั้นเราจึงเพิ่มรายการใหม่ลงในแคช มุ่งมั่นในภายหลัง

เมื่อพิจารณาถึงสิ่งนี้คำถามจะคลุมเครือเล็กน้อย:

ฉันเพิ่มไฟล์ผิดโดยใช้คำสั่ง ...

สถานการณ์ของ OP น่าจะเป็นไฟล์แรก (ไฟล์ที่ไม่ได้ติดตาม) เราต้องการให้ "เลิกทำ" เพื่อลบไฟล์ (ไม่ใช่แค่เนื้อหาปัจจุบัน) ออกจากรายการที่ถูกติดตาม หากเป็นกรณีนี้แสดงว่าไม่สามารถทำงาน git rm --cached <file>ได้

และเราก็สามารถวิ่งgit reset HEAD <file>ได้ สิ่งนี้เป็นสิ่งที่ดีกว่าเพราะมันใช้งานได้ในทั้งสองสถานการณ์: มันจะทำการเลิกทำเมื่อเราเพิ่มเวอร์ชันของรายการที่ถูกติดตามไปอย่างผิด ๆ

แต่มีสองประการ

ครั้งแรก: มี (ตามที่ระบุไว้ในคำตอบ) มีเพียงหนึ่งสถานการณ์ที่git reset HEADไม่สามารถใช้งานได้ แต่git rm --cachedทำได้: ที่เก็บใหม่ (ไม่มีข้อผูกมัด) แต่จริงๆแล้วนี่เป็นกรณีที่ไม่เกี่ยวข้องในทางปฏิบัติ

ข้อสอง: โปรดทราบว่าgit reset HEAD ไม่สามารถกู้คืนเนื้อหาไฟล์ที่แคชไว้ก่อนหน้าได้อย่างน่าอัศจรรย์เพียงแค่ซิงโครไนซ์ไฟล์จาก HEAD อีกครั้ง หากเราเข้าใจผิดgit addเขียนทับเวอร์ชันที่ไม่มีข้อผูกมัดฉากก่อนหน้าเราจะไม่สามารถกู้คืนได้ นั่นเป็นเหตุผลที่พูดอย่างเคร่งครัดเราไม่สามารถยกเลิก [*]

ตัวอย่าง:

$ git init
$ echo "version 1" > file.txt
$ git add file.txt   # First add of file.txt
$ git commit -m 'first commit'
$ echo "version 2" > file.txt
$ git add  file.txt   # Stage (don't commit) "version 2" of file.txt
$ git diff --cached file.txt
-version 1
+version 2
$ echo "version 3" > file.txt
$ git diff  file.txt
-version 2
+version 3
$ git add  file.txt    # Oops we didn't mean this
$ git reset HEAD file.txt  # Undo?
$ git diff --cached file.txt  # No dif, of course. stage == HEAD
$ git diff file.txt   # We have irrevocably lost "version 2"
-version 1
+version 3

แน่นอนว่ามันไม่สำคัญมากหากเราเพียงแค่ทำตามขั้นตอนการทำงานแบบสันหลังยาวของการทำ 'git add' เท่านั้นสำหรับการเพิ่มไฟล์ใหม่ (กรณีที่ 1) และเราอัพเดทเนื้อหาใหม่ผ่านgit commit -aคำสั่งcommit,


* (แก้ไข: ด้านบนถูกต้องจริง แต่ก็ยังสามารถมีวิธีแฮ็ค / convoluted เล็กน้อยสำหรับการกู้คืนการเปลี่ยนแปลงที่ staged แต่ไม่ได้มุ่งมั่นแล้วเขียนทับ - ดูความคิดเห็นโดย Johannes Matokic และ iolsmit)


4
การพูดอย่างเคร่งครัดมีวิธีการกู้คืนไฟล์ staged ที่ถูกแทนที่ด้วย git add ดังที่คุณกล่าวถึงการเพิ่ม git สร้างวัตถุ git สำหรับไฟล์ที่จะกลายเป็นวัตถุหลวมไม่เพียง แต่เมื่อลบไฟล์ทั้งหมด แต่ยังเมื่อถูกเขียนทับด้วยเนื้อหาใหม่ แต่ไม่มีคำสั่งให้กู้คืนโดยอัตโนมัติ แต่จะต้องมีการระบุและแยกไฟล์ด้วยตนเองหรือด้วยเครื่องมือที่เขียนขึ้นสำหรับกรณีนี้เท่านั้น (libgit2 จะอนุญาตสิ่งนี้) แต่สิ่งนี้จะจ่ายเฉพาะในกรณีที่ไฟล์มีความสำคัญและใหญ่มากและไม่สามารถสร้างใหม่ได้โดยแก้ไขรุ่นก่อนหน้า
โยฮันเนสมาโตคิ

2
เพื่อแก้ไขตัวเอง: เมื่อพบไฟล์ออบเจกต์หลวม (ใช้ meta-data เช่นวันที่สร้าง / เวลา) git cat-fileสามารถนำมาใช้เพื่อกู้คืนเนื้อหา
โยฮันเนสมาโตคิ

2
อีกวิธีหนึ่งในการกู้คืนการเปลี่ยนแปลงที่จัดเตรียมไว้ แต่ไม่ได้คอมมิทและแทนที่ด้วยเช่นอีกวิธีgit addคือgit fsck --unreachableจะแสดงรายการ obj ที่ไม่สามารถเข้าถึงได้ทั้งหมดซึ่งคุณสามารถตรวจสอบโดยgit show SHA-1_IDหรือgit fsck --lost-foundที่> เขียนวัตถุห้อยลงใน.git/lost-found/commit/หรือ.git/lost-found/other/ขึ้นอยู่กับประเภท ดูเพิ่มเติมgit fsck --help
iolsmit

110

การเลิกทำไฟล์ที่เพิ่มไปแล้วนั้นค่อนข้างง่ายด้วย Git สำหรับการรีเซ็ตmyfile.txtซึ่งเพิ่มไปแล้วให้ใช้:

git reset HEAD myfile.txt

คำอธิบาย:

หลังจากที่คุณฉากไฟล์ที่ไม่พึงประสงค์ (s), git resetเพื่อยกเลิกการที่คุณสามารถทำได้ Headเป็นส่วนหัวของไฟล์ของคุณในโลคัลและพารามิเตอร์สุดท้ายคือชื่อไฟล์ของคุณ

ฉันได้สร้างขั้นตอนในภาพด้านล่างโดยละเอียดเพื่อคุณมากขึ้นรวมถึงขั้นตอนทั้งหมดที่อาจเกิดขึ้นในกรณีเหล่านี้:

git ทำการรีเซ็ตไฟล์ HEAD


รูปภาพ: "คำสั่งเพิ่ม ... ""คำสั่งเพิ่ม ... " ( ปัจจุบันเป็นภาษาที่เข้าใจง่ายบุคคลที่สาม )
Peter Mortensen

รูปภาพ: ต้องการต้องการ (ไม่จำเป็นต้องใช้คำสแลงที่นี่)
Peter Mortensen

92
git rm --cached . -r

จะ "ยกเลิกการเพิ่ม" ทุกสิ่งที่คุณเพิ่มจากไดเรกทอรีปัจจุบันของคุณซ้ำ ๆ


3
ฉันไม่ได้ต้องการยกเลิกการเพิ่มทุกอย่างเพียงไฟล์เดียวเท่านั้น
paxos1977

3
มีประโยชน์ด้วยหากคุณไม่มีภาระผูกพันก่อนหน้านี้ ในกรณีที่ไม่มีการกระทำก่อนหน้านี้git reset HEAD <file>จะบอกว่าfatal: Failed to resolve 'HEAD' as a valid ref.
Priya Ranjan Singh

6
ไม่สิ่งนี้จะเพิ่มการลบทุกอย่างในไดเรกทอรีปัจจุบันของคุณ แตกต่างอย่างมากกับการเปลี่ยนแปลงเพียงเล็กน้อย
Mark Amery

88

วิ่ง

git gui

และลบไฟล์ทั้งหมดด้วยตนเองหรือโดยการเลือกทั้งหมดของพวกเขาและคลิกที่unstage จากกระทำปุ่ม


1
ใช่ฉันเข้าใจแล้ว ฉันแค่อยากจะบอกเป็นนัยว่าคุณบ่งบอกว่าในคำตอบของคุณเช่น "คุณสามารถใช้git-gui.... " :)
อเล็กซานเดอร์ Suraphel

1
มันบอกว่า "git-gui: ไม่พบคำสั่ง" ฉันไม่แน่ใจว่าใช้งานได้หรือไม่
Parinda Rajapaksha

ว้าวนี่มันง่ายมากแล้วทำบรรทัดคำสั่งที่คุณไม่เข้าใจ นี่คือคำแนะนำสำหรับผู้เริ่มต้นอย่างฉัน ขอบคุณที่เขียนสิ่งนี้!
Irfandy Jip

ขอบคุณ ไม่ต้องการเสี่ยงเลยต้องใช้ GUI
Sagar Khatri

83

Git มีคำสั่งสำหรับทุกการกระทำเท่าที่จะเป็นไปได้ แต่มันต้องการความรู้ที่ครอบคลุมเพื่อให้ได้สิ่งที่ถูกต้องและด้วยเหตุนี้มันจึงตอบโต้ได้ดีที่สุด ...

สิ่งที่คุณทำมาก่อน:

  • เปลี่ยนไฟล์และใช้หรือgit add .git add <file>

คุณต้องการอะไร:

  • ลบไฟล์ออกจากดัชนี แต่เก็บไว้เป็นเวอร์ชันและทิ้งไว้พร้อมกับการเปลี่ยนแปลงแบบไม่มีข้อผูกมัดในสำเนาการทำงาน:

    git reset head <file>
    
  • รีเซ็ตไฟล์เป็นสถานะสุดท้ายจาก HEAD, เลิกทำการเปลี่ยนแปลงและลบออกจากดัชนี:

    # Think `svn revert <file>` IIRC.
    git reset HEAD <file>
    git checkout <file>
    
    # If you have a `<branch>` named like `<file>`, use:
    git checkout -- <file>

    สิ่งนี้จำเป็นเนื่องจากgit reset --hard HEADจะไม่ทำงานกับไฟล์เดียว

  • ลบออก<file>จากดัชนีและการกำหนดเวอร์ชันโดยให้ไฟล์ที่ไม่มีเวอร์ชันพร้อมการเปลี่ยนแปลงในสำเนาการทำงาน:

    git rm --cached <file>
    
  • ลบ<file>จากสำเนาการทำงานและการกำหนดเวอร์ชันอย่างสมบูรณ์:

    git rm <file>
    

1
ฉันไม่สามารถแยกความแตกต่างของ 'git reset head <file>' และ 'git rm --cached <file> คุณอธิบายได้ไหม
jeswang

6
ไฟล์ @jeswang อาจเป็น 'รู้จัก' ถึงคอมไพล์ (การเปลี่ยนแปลงในไฟล์นั้นกำลังถูกติดตาม) หรือไม่ได้เป็น 'เวอร์ชัน' reset headเลิกทำการเปลี่ยนแปลงปัจจุบันของคุณ แต่ไฟล์นั้นยังคงถูกตรวจสอบโดย git rm --cachedนำไฟล์ออกจากการกำหนดเวอร์ชันดังนั้น git จะไม่ตรวจสอบการเปลี่ยนแปลงอีกต่อไป (และยังลบการเปลี่ยนแปลงที่มีการจัดทำดัชนีในปัจจุบันโดยบอกกับ git ก่อนหน้านี้add) แต่ไฟล์ที่เปลี่ยนแปลงจะถูกเก็บไว้ในสำเนาการทำงานของคุณ บน HDD
sjas

3
ความแตกต่างคือgit reset HEAD <file>เป็นแบบชั่วคราว - คำสั่งจะถูกนำไปใช้ต่อไปกระทำเพียงอย่างเดียว แต่git rm --cached <file>จะ unstage git add <file>จนกว่าจะได้รับเพิ่มอีกครั้งกับ นอกจากนี้git rm --cached <file>หมายความว่าถ้าคุณดันสาขานั้นไปที่รีโมตใครก็ตามที่ดึงสาขาจะได้รับไฟล์ที่ถูกลบจากโฟลเดอร์ของพวกเขา
DrewT

80

คำถามไม่ได้ถูกวางอย่างชัดเจน เหตุผลก็คือgit addมีสองความหมาย:

  1. การเพิ่มไฟล์ใหม่ไปยังพื้นที่จัดเตรียมจากนั้นยกเลิกด้วยgit rm --cached fileไปยังพื้นที่การแสดงละครแล้วเลิกกับ
  2. เพิ่มการแก้ไขgit reset HEAD fileไฟล์ไปยังพื้นที่การแสดงละครแล้วเลิกกับ

หากมีข้อสงสัยให้ใช้

git reset HEAD file

เพราะมันทำสิ่งที่คาดหวังในทั้งสองกรณี

คำเตือน:หากคุณทำgit rm --cached fileไฟล์ที่ถูกแก้ไข (ไฟล์ที่มีอยู่ก่อนในที่เก็บ) ไฟล์นั้นจะถูกลบออกgit commit! มันจะยังคงอยู่ในระบบไฟล์ของคุณ แต่ถ้าใครดึงการกระทำของคุณไฟล์จะถูกลบออกจากแผนผังการทำงานของพวกเขา

git statusจะบอกคุณว่าไฟล์ดังกล่าวเป็นไฟล์ใหม่หรือถูกแก้ไข :

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   my_new_file.txt
    modified:   my_modified_file.txt

7
+1 จำนวนพิเศษของคำตอบที่สูง upvoted git rm --cached somefileและแสดงความคิดเห็นในหน้านี้เป็นเพียงผิดแบนออกเกี่ยวกับพฤติกรรมของ ฉันหวังว่าคำตอบนี้ทำให้หน้าเว็บขึ้นสู่ตำแหน่งที่โดดเด่นซึ่งสามารถป้องกันมือใหม่จากการถูกเข้าใจผิดโดยการอ้างสิทธิ์ที่ผิดทั้งหมด
Mark Amery

หนึ่งในคำตอบที่ดีที่สุดของที่นี่น่าเศร้าที่รายการอยู่ในระดับต่ำ
Creos

64

หากคุณใช้ความรับผิดชอบเริ่มต้นและไม่สามารถใช้งานได้git resetให้ประกาศ "Git bankruptcy" และลบ.gitโฟลเดอร์แล้วเริ่มใหม่


5
หนึ่งเคล็ดลับคือการคัดลอกไฟล์. git / config ของคุณหากคุณได้เพิ่มต้นกำเนิดระยะไกลก่อนที่จะลบโฟลเดอร์
Tiago

4
@ChrisJohnsen ความคิดเห็นเป็นจุดบน บางครั้งคุณต้องการส่งไฟล์ทั้งหมดยกเว้นไฟล์เดียว: git add -A && git rm --cached EXCLUDEFILE && git commit -m 'awesome commit' (วิธีนี้ใช้ได้เมื่อไม่มีข้อผูกมัดก่อนหน้านี้, Failed to resolve 'HEAD'ปัญหาซ้ำ)

57

ตามคำตอบอื่น ๆ มากมายคุณสามารถใช้ git reset

แต่:

ฉันพบโพสต์เล็ก ๆ น้อย ๆ ที่ยิ่งใหญ่นี้ซึ่งจริง ๆ แล้วเพิ่มคำสั่ง Git (ดี, นามแฝง) สำหรับgit unadd: ดูgit unaddสำหรับรายละเอียดหรือ ..

เพียงแค่

git config --global alias.unadd "reset HEAD"

ตอนนี้คุณสามารถ

git unadd foo.txt bar.txt

45

ใช้ git add -iเพื่อลบไฟล์ที่เพิ่งเพิ่มเข้ามาจากการคอมมิชชันที่กำลังจะมาถึง ตัวอย่าง:

การเพิ่มไฟล์ที่คุณไม่ต้องการ:

$ git add foo
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   foo
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
# [...]#

ไปที่การเพิ่มแบบโต้ตอบเพื่อยกเลิกการเพิ่มของคุณ (คำสั่งที่พิมพ์ที่ git ที่นี่คือ "r" (เปลี่ยนกลับ), "1" (รายการแรกในรายการย้อนกลับรายการ), 'กลับ' เพื่อเลื่อนออกจากโหมดเปลี่ยนกลับและ "q" (เลิก):

$ git add -i
           staged     unstaged path
  1:        +1/-0      nothing foo

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp
What now> r
           staged     unstaged path
  1:        +1/-0      nothing [f]oo
Revert>> 1
           staged     unstaged path
* 1:        +1/-0      nothing [f]oo
Revert>> 
note: foo is untracked now.
reverted one path

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp
What now> q
Bye.
$

แค่นั้นแหละ! นี่คือหลักฐานของคุณซึ่งแสดงว่า "foo" กลับมาอยู่ในรายการที่ไม่ได้ติดตาม:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
# [...]
#       foo
nothing added to commit but untracked files present (use "git add" to track)
$

42

git removeหรือgit rmสามารถใช้สำหรับสิ่งนี้ด้วยการ--cachedตั้งค่าสถานะ ลอง:

git help rm

9
นี่จะเป็นการลบไฟล์ทั้งหมดหรือไม่
Willa

8
git rm --cached ...จะลบไฟล์ออกจาก repo คอมไพล์ พวกเขาจะยังคงอยู่ในคอมพิวเตอร์ของคุณ แต่สิ่งนี้แตกต่างจากการเปลี่ยนแปลงแบบไม่เปลี่ยนแปลงของไฟล์ สำหรับทุกคนที่สะดุดสิ่งนี้มันไม่ใช่คำตอบที่ถูกต้องสำหรับคำถาม
Addison

38

ต่อไปนี้เป็นวิธีหลีกเลี่ยงปัญหาที่รบกวนเมื่อคุณเริ่มโครงการใหม่:

  • สร้างไดเรกทอรีหลักสำหรับโครงการใหม่ของคุณ
  • git initวิ่ง
  • ตอนนี้สร้างไฟล์. gitignore (แม้ว่าจะว่างเปล่า)
  • ยอมรับไฟล์. gitignore ของคุณ

Git ทำให้มันยากจริงๆgit resetถ้าคุณไม่มีภาระผูกพันใด ๆ หากคุณสร้างการเริ่มต้นเล็ก ๆ เพียงเพื่อเห็นแก่หลังจากนั้นคุณสามารถgit add -Aและgit resetหลาย ๆ ครั้งตามที่คุณต้องการเพื่อให้ทุกอย่างถูกต้อง

ข้อดีอีกประการของวิธีนี้คือถ้าคุณพบปัญหาในตอนท้ายบรรทัดและต้องการรีเฟรชไฟล์ทั้งหมดของคุณมันเป็นเรื่องง่าย:

  • ตรวจสอบการกระทำครั้งแรกที่ นี่จะเป็นการลบไฟล์ทั้งหมดของคุณ
  • จากนั้นตรวจสอบการกระทำล่าสุดของคุณอีกครั้ง วิธีนี้จะดึงสำเนาไฟล์ใหม่ของคุณโดยใช้การตั้งค่าการสิ้นสุดบรรทัดปัจจุบัน

1
ได้รับการยืนยัน! ลองรีเซ็ต git หลังจากคอมไพล์แล้ว และคอมไพล์ก็บ่นเกี่ยวกับ HEAD ที่เสียหาย ตามคำแนะนำของคุณฉันสามารถคอมไพล์เพิ่มและกลับมาตั้งค่ามาด้วยไม่มีปัญหา :)
Kounavi

1
ส่วนที่สองใช้งานได้ แต่มันค่อนข้างงุ่มง่าม วิธีจัดการปลายสายขึ้นอยู่กับautocrlfมูลค่า ... สิ่งนี้จะไม่ทำงานในทุกโครงการขึ้นอยู่กับการตั้งค่า
sjas

1
คำตอบนี้สมเหตุสมผลในเวลาที่โพสต์ แต่ตอนนี้ล้าสมัย; git reset somefileและgit resetทั้งสองทำงานก่อนที่จะทำการส่งมอบครั้งแรกตอนนี้ นี่เป็นกรณีที่ Git หลายตัวออกมา
Mark Amery

@MarkAmery คุณอาจพูดถูก (มันคงจะเจ๋งถ้าคุณโพสต์แหล่งที่มาสำหรับการยืนยันของคุณ) แต่ก็ยังมีค่าในการเริ่มต้น repo ของคุณด้วยความมุ่งมั่นที่สะอาดหรือสอง
Ryan Lundy

34

บางที Git มีวิวัฒนาการมาตั้งแต่คุณโพสต์คำถามของคุณ

$> git --version
git version 1.6.2.1

ตอนนี้คุณสามารถลอง:

git reset HEAD .

นี่ควรเป็นสิ่งที่คุณกำลังมองหา


2
แน่นอน แต่คุณมีคำถามติดตามว่าควรเพิ่มหนึ่งในสองไฟล์ (หรือมากกว่า) ลงในไฟล์อย่างไร คู่มือ "รีเซ็ต git" ไม่พูดถึงว่า "git reset <paths>" ตรงข้ามกับ "git add <paths>" อย่างไรก็ตาม
Alex North-Keys

34

โปรดทราบว่าหากคุณไม่ได้ระบุการแก้ไขคุณจะต้องมีตัวคั่น ตัวอย่างจากคอนโซลของฉัน:

git reset <path_to_file>
fatal: ambiguous argument '<path_to_file>': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

git reset -- <path_to_file>
Unstaged changes after reset:
M    <path_to_file>

(Git เวอร์ชั่น 1.7.5.4)


2
ฉันลองgit reset <path>แล้วมันใช้งานได้ดีโดยไม่มีตัวคั่น ฉันใช้ git 1.9.0 ด้วย อาจจะไม่ทำงานในเวอร์ชั่นที่เก่ากว่านี้ใช่ไหม

31

หากต้องการลบไฟล์ใหม่ออกจากพื้นที่จัดเตรียม (และเฉพาะในกรณีของไฟล์ใหม่) ตามที่แนะนำข้างต้น:

git rm --cached FILE

ใช้ rm - แคชเฉพาะสำหรับไฟล์ใหม่ที่เพิ่มโดยไม่ตั้งใจ


4
ทราบว่า--cachedเป็นส่วนสำคัญจริงๆที่นี่
takeshin

1
-1; ไม่นี่ไม่ใช่การยกเลิกการจัดทำไฟล์ แต่จะเป็นการลบไฟล์ (โดยไม่ต้องลบออกจากแผนผังการทำงาน)
Mark Amery

25

หากต้องการรีเซ็ตทุกไฟล์ในโฟลเดอร์เฉพาะ (และโฟลเดอร์ย่อย) คุณสามารถใช้คำสั่งต่อไปนี้:

git reset *

4
ที่จริงแล้วสิ่งนี้ไม่ได้รีเซ็ตทุกไฟล์เพราะ * ใช้การขยายตัวของเชลล์และจะไม่สนใจ dotfiles (และจุดไดเรกทอรี)
Luc

คุณสามารถเรียกใช้จะเห็นอะไรที่เหลืออยู่และตั้งค่าได้ด้วยตนเองเช่นgit status git reset file
Zorayr

25

ใช้*คำสั่งเพื่อจัดการไฟล์หลายไฟล์พร้อมกัน:

git reset HEAD *.prj
git reset HEAD *.bmp
git reset HEAD *gdb*

เป็นต้น


3
โปรดทราบว่า * โดยปกติจะไม่รวม dotfiles หรือ 'dot-ไดเรกทอรี่' เว้นแต่คุณจะระบุไว้อย่างชัดเจน.*หรือ.*.prj
Luc

23

เพียงพิมพ์git resetมันจะย้อนกลับและเป็นเหมือนที่คุณไม่เคยพิมพ์git add .ตั้งแต่กระทำครั้งสุดท้ายของคุณ ให้แน่ใจว่าคุณได้กระทำก่อน


มันเกิดขึ้นมีการกระทำครั้งสุดท้าย ... แต่ฉันถามโดยเฉพาะเกี่ยวกับการลบไฟล์เดียวจากการกระทำไม่ใช่ทุกไฟล์จากการกระทำ
paxos1977

20

สมมติว่าฉันสร้างไฟล์ใหม่newFile.txt:

ป้อนคำอธิบายภาพที่นี่

สมมติว่าฉันเพิ่มไฟล์โดยไม่ตั้งใจgit add newFile.txt:

ป้อนคำอธิบายภาพที่นี่

ตอนนี้ฉันต้องการยกเลิกการเพิ่มนี้ก่อนที่จะกระทำgit reset newFile.txt:

ป้อนคำอธิบายภาพที่นี่


สมมติว่าฉันอยู่ที่รูปที่ 1 ความหมายหมายถึงฉันไม่ได้แม้แต่ "git.add" นอกจากนี้ฉันไม่ต้องการเปลี่ยนแปลงทั้งหมดเลย ฉันหมายถึงเมื่อฉันสถานะ git มันไม่ควรแสดงไฟล์สีแดงใด ๆ ฉันหมายความว่ามันควรจะซิงค์เหมือนว่าไม่มีไฟล์เดียวที่ถูกเปลี่ยนแปลงตั้งแต่การกด git ครั้งสุดท้าย ทำอย่างไรจึงจะบรรลุเป้าหมายนั้น
แตก

สมมติว่าคุณอยู่ในขั้นตอนแรก และคุณต้องการกำจัดการเปลี่ยนแปลงทั้งหมดที่คุณทำซึ่งทำให้ "newFile.txt" ปรากฏเป็นสีแดง
แตก

เมื่อฉันทำสถานะคอมไพล์ ฉันไม่ควรเห็นการเปลี่ยนแปลงใด ๆ เลย ไฟล์สีแดงทั้งหมดควรถูกเปลี่ยนกลับ
แตก

สวัสดีฉันคิดว่าคำถามของคุณคือวิธีลบไฟล์ที่ไม่ได้ติดตามจากแผนผังปัจจุบัน สำหรับสิ่งนั้นคุณสามารถใช้ "git clean -f -d" การทำเช่นนี้จะเป็นการลบไดเรกทอรีที่ไม่ได้ติดตาม
Vidura Mudalige

หากคุณไม่ต้องการลบไฟล์ที่ไม่ได้ติดตามให้เพิกเฉยแฟล็ก "-f"
Vidura Mudalige

19

สำหรับไฟล์เฉพาะ:

  • git รีเซ็ต my_file.txt
  • git checkout my_file.txt

สำหรับไฟล์ที่เพิ่มทั้งหมด:

  • รีเซ็ตคอมไพล์
  • ชำระเงินคอมไพล์

หมายเหตุ: เช็คเอาต์เปลี่ยนรหัสในไฟล์และย้ายไปยังสถานะที่ได้รับการปรับปรุงล่าสุด การรีเซ็ตไม่ได้เปลี่ยนรหัส มันเพิ่งรีเซ็ตส่วนหัว


3
กรุณาอธิบายความแตกต่างระหว่างและgit reset <file> git checkout <file>
เทรนต์

1
รีเซ็ตไม่เปลี่ยนไฟล์เพียงแค่นำออกจากสเตจ (= ดัชนีซึ่งวางไว้โดย git add)
ฟรังก์

เช็คเอาต์เปลี่ยนรหัสในไฟล์และย้ายไปยังสถานะที่ปรับปรุงล่าสุด รีเซ็ตไม่เปลี่ยนรหัสที่เพิ่งรีเซ็ตส่วนหัว ตัวอย่างเช่นรีเซ็ตการใช้งานสำหรับไฟล์ที่เพิ่มเข้ามาหรือทำการรีเซ็ตก่อนที่จะทำการพุชและเช็คเอาต์เพื่อกลับไปยังสเตจที่ได้รับการอัพเดต / คอมมิทล่าสุดก่อนที่จะเพิ่มคอมไพล์
Hasib Kamal

1
รีเซ็ต = ลบไฟล์ออกจากสเตจ แต่การเปลี่ยนแปลงจะยังคงอยู่ที่นั่น checkout = รับไฟล์ที่อัพเดตจากที่เก็บและจะแทนที่ไฟล์ปัจจุบัน
Imam Bux

14

คำสั่งนี้จะปลดการเปลี่ยนแปลงของคุณ:

git reset HEAD filename.txt

คุณยังสามารถใช้

git add -p 

เพื่อเพิ่มบางส่วนของไฟล์


14

นอกจากนี้ยังมีโหมดโต้ตอบ:

git add -i

เลือกตัวเลือก 3 เพื่อยกเลิกการเพิ่มไฟล์ ในกรณีของฉันฉันมักจะต้องการเพิ่มมากกว่าหนึ่งไฟล์และด้วยโหมดการโต้ตอบคุณสามารถใช้ตัวเลขเช่นนี้เพื่อเพิ่มไฟล์ สิ่งนี้จะใช้เวลาทั้งหมดยกเว้น 4: 1, 2, 3 และ 5

ในการเลือกลำดับเพียงพิมพ์ 1-5 เพื่อเลือกจาก 1 ถึง 5

Git ไฟล์จัดเตรียม


"ฉันประหลาดใจที่ไม่มีใครพูดถึงโหมดโต้ตอบ" - พวกเขาทำ: stackoverflow.com/a/10209776/1709587
Mark Amery


10
git reset filename.txt

จะลบไฟล์ชื่อ filename.txt ออกจากดัชนีปัจจุบันพื้นที่ "กำลังจะถูกส่ง" โดยไม่ต้องเปลี่ยนแปลงสิ่งใด


10

git add myfile.txt # สิ่งนี้จะเพิ่มไฟล์ของคุณลงในรายการที่ต้องการ

ตรงกันข้ามกับคำสั่งนี้คือ

git reset HEAD myfile.txt  # This will undo it.

ดังนั้นคุณจะอยู่ในสถานะก่อนหน้า จะมีการระบุอีกครั้งในรายการที่ไม่ได้ติดตาม (สถานะก่อนหน้า)

มันจะรีเซ็ตหัวของคุณด้วยไฟล์ที่ระบุ ดังนั้นหากหัวของคุณไม่มีความหมายหัวก็จะรีเซ็ต


9

ใน Sourcetree คุณสามารถทำได้อย่างง่ายดายผ่าน GUI คุณสามารถตรวจสอบคำสั่งที่ Sourcetree ใช้เพื่อเลิกไฟล์

ฉันสร้างไฟล์ใหม่และเพิ่มลงใน Git จากนั้นฉันก็ไม่ทำมันโดยใช้ Sourcetree GUI นี่คือผลลัพธ์ที่ได้:

ไฟล์ที่ไม่เก็บข้อมูล [08/12/15 10:43] git -c diff.mnemonicprefix = false -c core.quotepath = false -c credential.helper = การรีเซ็ตต้นทาง -q - พา ธ / ถึง / ไฟล์ / filename.java

Sourcetree ใช้resetเพื่อ unstage ไฟล์ใหม่


ใช่เทคนิคเดียวกันนี้สามารถใช้กับTortoiseGitเพื่อรับคำสั่ง Git สำหรับกรณีการใช้งานทั่วไป
ปีเตอร์มอร์เทนเซ่น

8
git reset filename.txt  

จะลบไฟล์ชื่อ filename.txt ออกจากดัชนีปัจจุบันพื้นที่ "กำลังจะถูกส่ง" โดยไม่ต้องเปลี่ยนแปลงสิ่งใด


git reset [ชื่อไฟล์] อดีต: git reset src / main / java / com / dao / ImportCsvDataDaoImpl.java
Rohit Chaurasiya
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.