ฉันควรใช้ git stash เพื่อบันทึกการเปลี่ยนแปลงอย่างต่อเนื่องของโครงการและผลักไปที่ gitub เพื่อเข้าถึงในคอมพิวเตอร์เครื่องอื่น ๆ หรือไม่?


20

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

ฉันไม่ต้องการผสมผสานการซิงค์บนคลาวด์ (เช่น Dropbox) กับการติดตามระยะไกลของ GitHub

ฉันเพิ่งระบุรหัสของฉันที่ยังไม่เสร็จ (และยุ่ง) ก่อน (และผลักมัน) เฉพาะเพื่อจุดประสงค์ในการดึงสิ่งนั้นในคอมพิวเตอร์เครื่องอื่นเพื่อทำงานต่อไป ฉันค่อนข้างมั่นใจว่านี่เป็นการปฏิบัติที่ไม่ดี

แต่วันนี้ฉันเจอgit stashGoogling นิดหน่อย ดูเหมือนเป็นโซลูชั่นที่สมบูรณ์แบบสำหรับสิ่งที่ฉันต้องการ

อย่างไรก็ตามเอกสารไม่ได้บอกว่ามันจะไป GitHub เมื่อฉันผลักดันการเปลี่ยนแปลงของฉัน นอกจากนั้นฉันต้องการทราบว่ามีวิธีที่มีประสิทธิภาพมากขึ้นเพื่อให้บรรลุความคล่องตัวที่ฉันต้องการหรือไม่

ขอบคุณล่วงหน้า!


1
ฉันลงคะแนนให้ปิดคำถามนี้เป็นนอกหัวข้อเพราะได้รับคำตอบแล้วในStack Overflow
David Arno

5
@DavidArno: ฉันไม่คิดว่ามันเป็นเว็บไซต์ข้ามที่ซ้ำกัน คำถาม StackOverflow เกี่ยวกับ "ฉันจะทำ X" และอันนี้เป็นเรื่องเกี่ยวกับ "Is X a best practice" อย่างน้อยที่สุดสาเหตุที่แท้จริงของคำถามนั้นแตกต่างกัน
Greg Burghardt

7
@DavidArno คนสุดท้ายที่ฉันตรวจสอบว่า "ตอบแล้วเมื่อ SO" ไม่ใช่เหตุผลที่จะปิดคำถาม
RubberDuck

คำตอบ:


28

ฉันเพิ่งระบุรหัสของฉันที่ยังไม่เสร็จ (และยุ่ง) ก่อน (และผลักมัน) เฉพาะเพื่อจุดประสงค์ในการดึงสิ่งนั้นในคอมพิวเตอร์เครื่องอื่นเพื่อทำงานต่อไป ฉันค่อนข้างมั่นใจว่านี่เป็นการปฏิบัติที่ไม่ดี

มันก็โอเคที่จะรับผิดชอบงานที่ยังไม่เสร็จยุ่ง ทำงานของคุณในสาขาหัวข้อ กระทำก่อนกำหนดและกระทำบ่อย ๆ อ่านข้อมูลเพิ่มเติมเมื่อไหร่ที่จะส่งมอบรหัส? สำหรับแนวทางบางอย่างเมื่อจะทำการกระทำ สำหรับ Git โดยเฉพาะมุ่งมั่นที่สาขาหัวข้อและผลักดันมันได้บ่อยเท่าที่คุณต้องการ

หากสาขาของหัวข้อนี้มีความหมายสำหรับคุณให้ยอมรับและส่งรหัสที่เสียหาย คุณควรเพียง Defer จากการผลักดันรหัสหักไปยังสาขาที่ถูกใช้โดยคนอื่น ๆ อย่าลังเลที่จะทำลายรหัสของคุณเอง


6
ฉันจะบอกว่ามันแข็งแกร่งขึ้น: อย่าทำงานในสาขาหลักเสมอใช้หัวข้อหัวข้อ กระทำตามที่เห็นสมควรผลักมันอย่างไม่เกรงกลัว เมื่อคุณพอใจกับการเปลี่ยนแปลงให้ผสานมันเป็นหลัก
9000

คำแนะนำที่ดี! ฉันคิดว่าความสับสนครั้งใหญ่อาจเกิดขึ้นเพราะเราจำเป็นต้องเพิ่มความคิดเห็นให้กับคอมมิชชันและบางครั้งมันจะเป็นอะไรบางอย่างเช่น "งานระหว่างทำ" หรืออะไรทำนองนั้น และใช่ฉันทำงานคนเดียวในสาขานี้ดังนั้นทุกสิ่งที่คุณพูดสมเหตุสมผล!
ลีอันโดร

4
สิ่งนี้ยังช่วยให้คุณมีทางเลือกในการบีบให้แต่ละบุคคลเข้ารวมเป็นหนึ่งเมื่อรวมสาขาคอมไพล์
นูปปี้

2
@Leandro กระทำข้อความควรเป็นอะตอมและชัดเจนตามเหมาะสม ตัวอย่างเช่นแม้ว่าจะเป็นงานระหว่างทำคุณสามารถพูดเช่น "การเพิ่มตัวควบคุมเพื่อจัดการคำขอหน้า - WIP" ข้อความคอมมิทยังแสดงประวัติการเปลี่ยนแปลงที่สามารถค้นหาได้ สิบคำมั่นสัญญาของ "WIP" จะไม่ช่วยให้ทุกคนมองหาการเปลี่ยนแปลงรอบการจัดการผู้ใช้ตัวอย่างเช่น
Ben

7

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

หากคุณเป็นคนเดียวที่ทำงานในสาขาจะไม่มีปัญหาในการส่งรหัสที่เสีย สิ่งที่ฉันทำเมื่ออยู่ในสถานการณ์ที่คล้ายคลึงกันคือการกระทำที่ผิดพลาดจากนั้นหลังจากดึงไปที่ตำแหน่งอื่นให้ทำgit reset HEAD~1เพื่อเลิกทำ แน่นอนว่าสิ่งนี้ต้องใช้--forceกับคุณpullsและpushesเมื่อคุณเปลี่ยนสถานที่

git commit --amendหรือฉันเพียงแค่รอจนกว่าครั้งแรกของฉันกระทำและทำ หรือฉันเพียงแค่สควอชทั้งหมดที่เกิดจากการกระทำผิดเมื่อฉันกระทำสาขาฟีเจอร์ หรือฉันไม่ต้องกังวลเกี่ยวกับการกระทำผิดที่ทำเครื่องหมายไว้อย่างชัดเจนบางอย่างในประวัติศาสตร์ของฉันเพราะฉันมักจะไม่ออกไปจนกว่าฉันจะอยู่ในที่หยุดที่ดี มีตัวเลือกมากมาย


1
ฉันไม่แนะนำให้คุ้นเคยกับ--amendมันดังนั้นมันจึงจำเป็น--forceสำหรับการผลัก มุ่งมั่นที่ดีขึ้นเฉพาะกับสาขาใบปลิว
leftaroundabout

1

stashไม่พอใจอะไรเลยนอกจากทำความสะอาดไดเร็กตอรี่งานของคุณเพื่อ“ แยกสาขาของคุณ”; หากคุณไม่ได้stash popรัฐกลับทันทีสิ่งต่าง ๆ จะสับสนมาก

หากมีการบันทึกงานจริงแม้ว่าจะไม่ดีสำหรับการทำธุรกรรม repo อย่างถาวร แต่ก็ควรจะมีภาระผูกพัน ที่จริงแล้วฉันไม่เคยทิ้งไดเรกทอรีการทำงานของฉันในสภาวะที่ไม่ได้อยู่ในการควบคุมเวอร์ชัน - ฉันใช้สคริปต์ Python แบบง่าย ๆเพื่อบันทึกการเปลี่ยนแปลงทุกครั้งเป็นการกระทำชั่วคราว หากคุณต้องการลองสิ่งต่อไปนี้เป็นสิ่งที่ต้องทำ:

  1. เมื่อคุณได้ทำบางงานยังไม่เสร็จและกำลังจะออกจากสถานที่ทำงาน, git-tmp-commitการดำเนินการ มันจะทำการเปลี่ยนแปลงทั้งหมดไปยังสาขาใหม่ที่ไม่ซ้ำใครโดยอัตโนมัติ
  2. ผลักสาขานี้ไปยังระยะไกล
  3. ออกจาก.
  4. เมื่อคุณต้องการดำเนินการต่อให้โคลนสาขานั้นอีกครั้งจากระยะไกล ฉันทำสิ่งนี้กับccdสคริปต์ซึ่งจริง ๆ แล้วตรวจสอบทุกอย่างตั้งแต่เริ่มต้นจนถึงโฟลเดอร์ชั่วคราวเลือกสาขาล่าสุดโดยอัตโนมัติ ... แต่คุณสามารถดึงข้อมูลและตรวจสอบสาขาtemporary-commits/original-branch/YYYY-MM-DD...จากโคลนที่มีอยู่ของ repo ได้ด้วยตนเอง
  5. สุดท้าย“ยกเลิกการกระทำ” git-tmp-commit -rการเปลี่ยนแปลงที่มี จะพาคุณกลับไปที่สาขาเดิม (เช่นmaster) และออกจากการเปลี่ยนแปลงของชั่วคราวกระทำในไดเรกทอรีการทำงานเพื่อให้คุณสามารถดำเนินการต่อที่นี่จนกว่าจะถึงเวลาของมันเป็นที่เหมาะสมกระทำ (หรือชั่วคราวหากคุณต้องออกอีกครั้ง)

วิธีสคริปต์ที่เขียนตอนนี้งานนี้เฉพาะในกรณีที่มีสาขาmasterใน repo ดังนั้นในข้อสงสัยคุณจะต้องgit branch -d master; เห็นได้ชัดว่าไม่เหมาะอย่างยิ่ง ...

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