เลิกทำ gv mv (เปลี่ยนชื่อ)


139

เป็นวิธีที่ถูกต้องในการยกเลิกการเปลี่ยนชื่อในคอมไพล์เช่น:

git mv file1 file2

21
คำตอบที่หน้าด้าน:git mv file2 file1
CanSpice

@CanSpice: นั่นคือคำตอบที่ถูกต้อง; ไม่มีอะไรที่หน้าด้านเกี่ยวกับมัน
CB Bailey

1
@Charles: ถ้าอย่างนั้นฉันได้ให้มันเป็นคำตอบที่ไม่ใช่หน้าด้านที่เหมาะสม :-)
CanSpice

git mv file2 file1 คุณคาดหวังอะไรอีกไหม
Lakshman Prasad

คำตอบ:


230

คำตอบที่ไม่ใช่หน้าด้าน:

git mv file2 file1

อัพเดตดัชนีสำหรับเส้นทางเก่าและใหม่โดยอัตโนมัติ

ตรวจสอบเอกสารของgit mv


4
สมมติว่า file1 และ file2 อยู่ในไดเรกทอรีปัจจุบัน (.) แล้วทำไมถึงgit checkout .ไม่ทำงานแม้ว่าจะมี-fตัวเลือกอยู่ก็ตาม
ryenus

9
ดูเหมือนว่าหายากว่าสิ่งที่จะเป็นที่ใช้งานง่ายเป็นนี้ :)
ragerdl

@ryenus git checkout -- .คุณจำเป็นต้องใช้
Joseph238

ฮ่า ๆ. สนุกมาก
Dmitriy Dokshin

ไม่ได้ทำงานสำหรับฉันให้ข้อผิดพลาด: fatal: source directory is empty,เพียงgit reset --hardไม่ทำงาน
mac13k

43

หากคุณไม่ได้ทำการเปลี่ยนแปลงใด ๆ (ที่คุณต้องการเก็บไว้) ตั้งแต่การกระทำครั้งสุดท้ายคุณสามารถทำได้

git reset --hard

6
git reset --hardฉันจะไม่ต้องการที่จะได้รับในนิสัยของการใช้ เพียงแค่เลื่อนไปข้างหลังมันเป็นทางเลือกที่ปลอดภัยกว่าสำหรับฉัน
osa

4
ทำงานให้ฉัน ฉันต้องการยกเลิก "git mv" ที่ 1) ยังไม่ได้ทำและ 2) ฉันไม่มีบทอื่นเลย
Ed of the Mountain

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

13
git reset HEAD file2

ทำเคล็ดลับสำหรับฉัน


1
ปัญหาเดียวที่ฉันมีกับคำตอบนี้คือมันเหลือสำเนาสำหรับ file2 บนดิสก์
user52472

9

ในกรณีของฉันฉันย้ายโฟลเดอร์ทั้งหมดแล้วรู้ว่าฉันไม่ควรมี

ฉันชอบคำตอบของ @Dave Konopka จริง ๆ แต่ฉันไม่ประสบความสำเร็จมากกับวิธีการนั้น (อาจเป็นรุ่น GIT ของฉัน (1.8.4) ไฟล์ของฉันยังคงแสดงว่าถูกลบฉันมีการเปลี่ยนแปลงอื่น ๆ ในสแต็คที่ฉันไม่ต้องการ แพ้ (น่าเสียดาย)

ฉันประสบความสำเร็จในการทำสิ่งนี้:

git reset moved_folder
git checkout original_folder

8

ขึ้นอยู่กับสิ่งที่คุณต้องการทำให้สำเร็จ หากคุณต้องการให้ไฟล์ปรากฏเป็นไฟล์ที่ไม่เคยถูกย้ายคุณสามารถรีเซ็ต (หรือ rebase) กลับไปเป็นก่อนที่จะย้าย หากคุณไม่สนใจประวัติศาสตร์ให้ย้ายมันกลับไป


4
งานชิ้นแรกทำงานได้ดีตราบใดที่คุณยังไม่ได้ทำอะไรหรือบางคนไม่ได้ดึงคุณ
CanSpice

7

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

เมื่อคุณลบไฟล์ที่มีการเปลี่ยนแปลงทั้งหมดคุณสามารถเรียกใช้git checkout -- *เพื่อเรียกคืนชื่อไฟล์ดั้งเดิมในเครื่องได้


4
git reset HEAD file2
git checkout -- file1
rm file2

คำสั่งแรก unstages file2 แต่ทิ้งสำเนาไว้ คำสั่งที่สองเรียกคืนไฟล์ต้นฉบับและไฟล์ที่สามจะลบไฟล์ใหม่


1

เคล็ดลับที่ฉันใช้คือการทำ git stash เพื่อยกเลิกการเปลี่ยนแปลงทั้งหมดของฉัน (ซึ่งรวมถึงการเรียกคืนไฟล์ mv'd) จากนั้นลบ stash ด้วย git stash drop


0

น่ากลัวน้อยกว่าคือไปที่ระดับสูงสุดของ repo และทำ:

git reset การ
ชำระเงิน git

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.