อะไรคือความแตกต่างระหว่าง“ สาขา git” และ“ git checkout -b”?


195

ฉันเคยgit checkout -bสร้างสาขาใหม่ ฉันคิดว่าgit branchทำสิ่งเดียวกัน สองคำสั่งเหล่านี้แตกต่างกันอย่างไรถ้าพวกเขาแตกต่างกันอย่างไร


คำตอบ:


259

git checkout -b BRANCH_NAMEสร้างสาขาใหม่และตรวจสอบสาขาใหม่ในขณะที่git branch BRANCH_NAMEสร้างสาขาใหม่ แต่จะทำให้คุณอยู่ในสาขาเดียวกัน

ในคำอื่น ๆgit checkout -b BRANCH_NAMEทำต่อไปนี้สำหรับคุณ

git branch BRANCH_NAME    # create a new branch
git checkout BRANCH_NAME  # then switch to the new branch

44

git branch สร้างสาขา แต่คุณยังคงอยู่ในสาขาปัจจุบันที่คุณเช็คเอาต์

git checkout -b สร้างสาขาและตรวจสอบออก

มันอาจเป็นรูปแบบย่อของ:

git branch name
git checkout name

สมมติว่า: "สาขา git สร้างสาขา แต่คุณยังคงอยู่ในสาขาปัจจุบันจากที่คุณเช็คเอาต์"
Akash Verma

28
  • git branch:แสดงสาขาทั้งหมดของคุณ
  • git branch newbranch:สร้างสาขาใหม่
  • git checkout -b newbranch:สร้างสาขาใหม่และเปลี่ยนเป็นสาขานั้นทันที นี้เป็นเช่นเดียวกับตามมาด้วยgit branch newbranchgit checkout newbranch

24

ไวยากรณ์แบบเต็ม:

git checkout -b [NEW_BRANCH] [FROM_BRANCH]

[FROM_BRANCH] เป็นตัวเลือก หากไม่มี FROM_BRANCH git จะใช้สาขาปัจจุบัน


7

นอกจากนี้ยังมีธงอื่นที่จะกล่าวถึงซึ่งสัมพันธ์กับสิ่งเหล่านี้ ..

git checkout -B BRANCH_NAME

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


2
คุณอธิบายเพิ่มเติมได้ไหม ฉันไม่ทราบว่าการตั้งค่าใหม่สำหรับ git อย่างไร
Mikaël Mayer

3
จากคู่มือในคอมไพล์:If -B is given, <new_branch> is created if it doesn't exist; otherwise, it is reset. This is the transactional equivalent of $ git branch -f <branch> [<start point>] $ git checkout <branch>
ddavison

คุณหมายความว่าคุณสามารถนำสาขาที่มีอยู่กลับมาใช้ใหม่ได้หรือไม่
Mikaël Mayer

1
เป็นcheckout -Bอันตรายหรือไม่ถ้าสาขาที่คุณเปลี่ยนไปใช้ร่วมกับผู้อื่น? ฉันใช้สิ่งนี้เมื่อเร็ว ๆ นี้และดูเหมือนจะรวมการเปลี่ยนแปลงในสาขาอื่นของฉันเข้ากับสาขาที่ฉันเปลี่ยนไปโดยอัตโนมัติ
เจฟฟ์

หากคุณดึงนักพัฒนาสาขาอื่นจากระยะไกลและทำgit checkout -Bใช่แล้วมันจะรวมหรืออาจแทนที่
ddavison

-1

มีรูปแบบของคำสั่งทั้งสองที่คล้ายกัน (ดูที่ git-scm docs เวอร์ชั่น 2.11.1):

git branch <branchname> <start-point>

และ

git checkout -b <new_branch> <start_point>

หลังดำเนินการคำสั่งสาขาแรกแล้วเพิ่มการชำระเงิน ในรูปแบบนั้นอ้างอิงถึงเอกสารของสาขา git อย่างชัดเจน:

การระบุ -b ทำให้เกิดสาขาใหม่ที่จะสร้างราวกับว่า git-branch [2] ถูกเรียกใช้จากนั้นเช็คเอาต์


1
นี้ไม่ได้เพิ่มข้อมูลใหม่ ๆ มากกว่าคำตอบที่ได้รับการยอมรับจาก 2011
Melpomene

มันเพิ่มข้อมูลใหม่เกี่ยวกับ <start-point> ซึ่งโดยส่วนตัวแล้วฉันพบว่ามีประโยชน์อย่างมากในการสร้างสาขาบนวัตถุที่ตั้งอยู่ที่อื่นโดยไม่ต้องเช็กเอาต์วัตถุก่อนหรือย้ายสาขาปัจจุบัน การใช้สัญลักษณ์เป็น [FROM_BRANCH] เมื่อจริง ๆ แล้วการอ้างอิง git นั้นไม่ได้มีประโยชน์ในความคิดของฉัน
Pshemy108

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

-1

เป็นหลัก:

สาขา A-git ช่วยให้คุณสร้างสาขาธรรมดาและเรียบง่าย

B -git checkout -b ช่วยให้คุณสามารถสร้างสาขาและสลับไปที่มันในเวลาเดียวกัน

คุณจะใช้อันไหน 1- สาขาคอมไพล์เมื่อคุณต้องการสร้างสาขา แต่อยู่ในสาขาปัจจุบัน 2- git checkout -b เมื่อคุณต้องการสร้างและสลับ ถ้าคุณดูมันง่ายในการสร้างสาขาและเปลี่ยนเป็น ดังนั้นทางเลือกเป็นของคุณ :)


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