ฉันมีสองโครงการ หนึ่งคือโครงการ "เป็นทางการ" และที่สองคือการปรับเปลี่ยนแสง (บางไฟล์เพิ่ม) ฉันสร้างสาขาใหม่และใส่ไฟล์ใหม่เข้าไป แต่ในระหว่างการพัฒนาบางไฟล์ที่พบได้ทั่วไปในทั้งสองสาขาจะเปลี่ยนไป
ฉันจะส่งเฉพาะไฟล์เหล่านี้ได้อย่างไร
ฉันมีสองโครงการ หนึ่งคือโครงการ "เป็นทางการ" และที่สองคือการปรับเปลี่ยนแสง (บางไฟล์เพิ่ม) ฉันสร้างสาขาใหม่และใส่ไฟล์ใหม่เข้าไป แต่ในระหว่างการพัฒนาบางไฟล์ที่พบได้ทั่วไปในทั้งสองสาขาจะเปลี่ยนไป
ฉันจะส่งเฉพาะไฟล์เหล่านี้ได้อย่างไร
คำตอบ:
ฉันคิดว่าคุณต้องการที่จะส่งมอบการเปลี่ยนแปลงสาขาหนึ่งแล้วทำให้การเปลี่ยนแปลงเหล่านั้นสามารถมองเห็นได้ในสาขาอื่น ใน git คุณไม่ควรมีการเปลี่ยนแปลงด้านบนของ HEAD เมื่อเปลี่ยนสาขา
คุณส่งไฟล์ที่ถูกเปลี่ยนแปลงโดย:
git commit [some files]
หรือถ้าคุณแน่ใจว่าคุณมีพื้นที่จัดเตรียมที่สะอาดคุณก็สามารถทำได้
git add [some files] # add [some files] to staging area
git add [some more files] # add [some more files] to staging area
git commit # commit [some files] and [some more files]
หากคุณต้องการทำให้การกระทำที่มีอยู่ในทั้งสองสาขาที่คุณทำ
git stash # remove all changes from HEAD and save them somewhere else
git checkout <other-project> # change branches
git cherry-pick <commit-id> # pick a commit from ANY branch and apply it to the current
git checkout <first-project> # change to the other branch
git stash pop # restore all changes again
git commit [some files]
ซึ่งหมายถึง--only
สวิตช์) ควรใช้ ตัวอย่างแรก ( git add [some files]
ตามด้วยgit commit
) จะกระทำการเปลี่ยนแปลงอื่น ๆ ที่มีการจัดฉาก
รับรายการไฟล์ที่คุณต้องการคอมมิท
$ git status
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: file1
modified: file2
modified: file3
modified: file4
เพิ่มไฟล์ลงในการจัดเตรียม
$ git add file1 file2
ตรวจสอบเพื่อดูสิ่งที่คุณกระทำ
$ git status
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: file1
modified: file2
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: file3
modified: file4
คอมมิตไฟล์ด้วยข้อความคอมมิท
$ git commit -m "Fixed files 1 and 2"
หากคุณยอมรับไฟล์ผิด
$ git reset --soft HEAD~1
หากคุณต้องการเลิกทำไฟล์และเริ่มใหม่
$ git reset
Unstaged changes after reset:
M file1
M file2
M file3
M file4
คุณสามารถคอมมิทไฟล์ที่อัปเดตบางอย่างเช่นนี้:
git commit file1 file2 file5 -m "commit message"
บางส่วนนี้ดูเหมือนว่า "ไม่สมบูรณ์"
กลุ่มคนจะไม่ทราบว่าควรใช้เครื่องหมายคำพูด ฯลฯ หรือไม่
เพิ่ม 1 ไฟล์ที่ระบุเส้นทางที่ตั้งเช่นกัน
git add JobManager/Controllers/APIs/ProfileApiController.cs
คอมมิท (จำไว้ว่าคอมมิชชันเป็นโลคัลเท่านั้นไม่มีผลกับระบบอื่น)
git commit -m "your message"
กดไปที่ repo ระยะไกล
git push (this is after the commit and this attempts to Merge INTO the remote location you have instructed it to merge into)
คำตอบอื่น ๆ แสดงที่ซ่อนฯลฯ ซึ่งบางครั้งคุณอาจต้องการทำ
หากคุณจัดทำไฟล์ไว้เรียบร้อยแล้ว
git reset HEAD [file-name-A.ext] [file-name-B.ext]
จากนั้นเพิ่มกลับทีละนิด
สมมติว่าคุณทำการเปลี่ยนแปลงหลายไฟล์เช่น:
แต่คุณต้องการยอมรับเฉพาะการเปลี่ยนแปลงของ File1 และ File3
มีสองวิธีในการทำสิ่งนี้:
1.Stage ไฟล์ทั้งสองนี้โดยใช้:
git add file1 file2
จากนั้นกระทำ
git commit -m "your message"
จากนั้นดัน
git push
2. กระทำโดยตรง
git commit file1 file3 -m "my message"
จากนั้นดัน
git push
วิธีแรกที่จริงแล้วมีประโยชน์ในกรณีที่หากเราทำการแก้ไขไฟล์เป็นระยะและจัดเตรียมไว้ -> โครงการขนาดใหญ่โดยทั่วไปโครงการสด
แต่ถ้าเราปรับเปลี่ยนไฟล์และไม่จัดเตรียมไฟล์เราสามารถทำการคอมมิตโดยตรง -> โปรเจคเล็ก ๆ ได้
--only
เมื่อไม่ได้ระบุชื่อแฟ้มเป็นตัวอย่างที่สองแสดงให้เห็นคอมไพล์ถือว่าธงคำสั่งสำหรับข้อโต้แย้งเหล่านี้คือ จากนั้นจะเป็นคำสั่งเดียวกับgit commit --only file1 --only file3 -m "my message"
หรือใช้ทางลัดเป็นgit commit -o file1 -o file3 -m "my message"
Reference: git-scm.com/docs/git-commit
นี่เป็นวิธีการง่ายๆหากคุณไม่มีการเปลี่ยนแปลงรหัสมาก:
1. git stash
2. git stash apply
3. remove the files/code you don't want to commit
4. commit the remaining files/code you do want
จากนั้นถ้าคุณต้องการรหัสที่คุณลบ (บิตที่คุณไม่ได้กระทำ) ในการกระทำที่แยกต่างหากหรือสาขาอื่นแล้วในขณะที่ยังคงอยู่ในสาขานี้ทำ:
5. git stash apply
6. git stash
ด้วยขั้นตอนที่ 5 เมื่อคุณใช้ stash แล้วและยืนยันรหัสที่คุณต้องการในขั้นตอนที่ 4 diff และ untracked ใน stash ที่นำมาใช้ใหม่จะเป็นรหัสที่คุณลบในขั้นตอนที่ 3 ก่อนที่คุณจะยอมรับในขั้นตอนที่ 4
เช่นขั้นตอนที่ 6 เป็นรหัสที่คุณไม่ต้องการ [ต้องการ] เนื่องจากคุณอาจไม่ต้องการสูญเสียการเปลี่ยนแปลงเหล่านั้นใช่ไหม ดังนั้นการสะสมใหม่จากขั้นตอนที่ 6 จึงสามารถกระทำกับสาขานี้หรือสาขาอื่น ๆ ได้ด้วยการทำ git stash ในสาขาที่ถูกต้องและกระทำการ
เห็นได้ชัดว่านี่เป็นการสันนิษฐานว่าคุณทำตามขั้นตอนในขั้นตอนเดียวหากคุณซ่อนที่จุดอื่น ๆ ในขั้นตอนเหล่านี้คุณจะต้องจดบันทึกการอ้างอิงสำหรับแต่ละขั้นตอนด้านบน (แทนที่จะเป็นเพียงแค่การซ่อนพื้นฐานและใช้ที่ซ่อนล่าสุด)