Git push จะไม่ทำอะไรเลย (ทุกอย่างเป็นปัจจุบัน)


105

ฉันกำลังพยายามอัปเดตที่เก็บ Git บน GitHub ฉันทำการเปลี่ยนแปลงหลายอย่างเพิ่มพวกเขามุ่งมั่นแล้วพยายามทำไฟล์git push. คำตอบบอกฉันว่าทุกอย่างเป็นปัจจุบัน แต่เห็นได้ชัดว่ามันไม่ใช่

git remote show origin

ตอบสนองด้วยพื้นที่เก็บข้อมูลที่ฉันคาดหวัง

เหตุใด Git จึงบอกฉันว่าที่เก็บเป็นข้อมูลล่าสุดเมื่อมีการคอมมิตในเครื่องที่มองไม่เห็นในที่เก็บ

  [searchgraph]  git status
# On branch develop
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       Capfile
#       config/deploy.rb
nothing added to commit but untracked files present (use "git add" to track)

  [searchgraph]  git add .

  [searchgraph]  git status
# On branch develop
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   Capfile
#       new file:   config/deploy.rb
#

  [searchgraph]  git commit -m "Added Capistrano deployment"
[develop 12e8af7] Added Capistrano deployment
 2 files changed, 26 insertions(+), 0 deletions(-)
 create mode 100644 Capfile
 create mode 100644 config/deploy.rb

  [searchgraph]  git push
Everything up-to-date

  [searchgraph]  git status
# On branch develop
nothing to commit (working directory clean)

ตรวจสอบให้แน่ใจว่าคุณกำลังผลักดันไปยังสาขาที่ถูกต้อง
— Brian

คำตอบ:


145

git pushไม่ได้ผลักดันสาขาในพื้นที่ของคุณทั้งหมด: จะรู้ได้อย่างไรว่าจะผลักดันสาขาที่ห่างไกลไปยังสาขาใด จะพุชเฉพาะสาขาในพื้นที่ซึ่งได้รับการกำหนดค่าให้ส่งไปยังสาขาระยะไกลโดยเฉพาะ

ใน Git เวอร์ชันของฉัน (1.6.5.3) เมื่อฉันเรียกใช้git remote show originมันจะพิมพ์ออกมาว่ากิ่งก้านใดถูกกำหนดค่าสำหรับการพุช:

Local refs configured for 'git push':
  master pushes to master (up to date)
  quux   pushes to quux   (fast forwardable)

ถาม แต่ฉันสามารถผลักดันไปได้masterโดยไม่ต้องกังวลเกี่ยวกับทั้งหมดนี้!

เมื่อคุณgit cloneตั้งค่าmasterสาขาในพื้นที่ของคุณให้พุชไปยังmasterสาขาของรีโมต(เรียกในท้องถิ่นว่าorigin/master) ตามค่าเริ่มต้นดังนั้นหากคุณยอมรับเพียงอย่างเดียวmasterคำง่ายๆgit pushจะส่งการเปลี่ยนแปลงของคุณกลับไป

อย่างไรก็ตามจากตัวอย่างข้อมูลเอาต์พุตที่คุณโพสต์คุณอยู่ในสาขาที่เรียกว่าdevelopซึ่งฉันเดาว่าไม่ได้ตั้งค่าให้พุชไปยังอะไรเลย ดังนั้นการgit pushไม่มีข้อโต้แย้งจะไม่ผลักดันการกระทำในสาขานั้น

เมื่อมีข้อความว่า "ทุกอย่างทันสมัย" หมายความว่า "สาขาทั้งหมดที่คุณบอกวิธีการผลักดันเป็นข้อมูลล่าสุด"

ถามแล้วฉันจะผลักดันการกระทำของฉันได้อย่างไร?

หากสิ่งที่คุณต้องการจะทำคือนำการเปลี่ยนแปลงของคุณdevelopเข้าorigin/masterแล้วคุณอาจจะผสานให้เป็นท้องถิ่นของคุณmasterผลักดันแล้วว่า

git checkout master
git merge develop
git push             # will push 'master'

หากสิ่งที่คุณต้องการคือการสร้างdevelopสาขาบนรีโมตแยกจากmasterนั้นจัดหาอาร์กิวเมนต์ให้กับgit push:

git push origin develop

ที่จะ: สร้างสาขาใหม่บนรีโมทที่เรียกว่าdevelop; และปรับปรุงสาขานั้นให้ทันสมัยกับdevelopสาขาในพื้นที่ของคุณ และชุดdevelopที่จะผลักดันไปorigin/developเพื่อที่ว่าในอนาคตgit pushโดยไม่ขัดแย้งจะผลักดันdevelopโดยอัตโนมัติ

หากคุณต้องการผลักดันในพื้นที่ของคุณdevelopไปยังสาขาที่ห่างไกลซึ่งเรียกว่าอย่างอื่นที่ไม่ใช่ developคุณสามารถพูดว่า:

git push origin develop:something-else

อย่างไรก็ตามแบบฟอร์มดังกล่าวจะไม่ถูกตั้งค่าdevelopเพื่อผลักดันorigin/something-elseในอนาคตเสมอไป เป็นการดำเนินการเพียงครั้งเดียว


ขอบคุณมาก git push ที่มาของคุณพัฒนา: มีอย่างอื่นให้คำตอบสำหรับคำถามที่ฉันไม่สามารถหาได้ในขณะที่
— Antroid

1
ในกรณีของฉันgit push origin xยังไม่ได้ตั้งสาขา x ที่จะผลักดันในอนาคต เป็นเพราะ pushspec เฉพาะใน.gitconfig [remote "origin"]ส่วนที่ทำให้เกิดพฤติกรรมของ git
— รามัน

ใช้เพียงgit push originฉันมีปัญหานี้โดยใช้ตัวอย่างของคุณgit push origin developและรองรับกับสาขาหลักของฉันgit push origin masterปัญหาได้รับการแก้ไขแล้วขอบคุณ
— FantomX1

28

สิ่งนี้เกิดขึ้นกับฉันเมื่อแอปพลิเคชัน SourceTree ของฉันขัดข้องระหว่างการจัดเตรียม และในบรรทัดคำสั่งดูเหมือนว่าก่อนหน้านี้git addได้รับความเสียหาย ในกรณีนี้ให้ลอง:

git init
git add -A
git commit -m 'Fix bad repo'
git push

ในคำสั่งสุดท้ายคุณอาจต้องตั้งค่าสาขา

git push --all origin master

โปรดจำไว้ว่านี่เพียงพอแล้วหากคุณยังไม่ได้ทำการแยกสาขาหรือประเภทใดประเภทหนึ่ง git push origin developในกรณีที่ให้แน่ใจว่าคุณผลักดันไปยังสาขาที่ถูกต้องเช่น


15

ลอง:

git push --all origin

สิ่งนี้ผลักดันให้คอมมิตแยกสาขาบน repo ไม่ใช่จากสาขาเดียวไปเป็นมาสเตอร์
— Sreedevi J

13

git push origin HEAD:masterโปรดลองไปสุดท้ายกระทำแล้วไม่


1
สิ่งนี้ใช้งานได้จริง คุณต้องการที่จะอธิบายว่าทำไมจึงได้ผล?
— René Nyffenegger

ข้อความจากเอกสาร:Push the current branch to the remote ref matching master in the origin repository. This form is convenient to push the current branch without thinking about its local name.
— uruapanmexicansong

ทำงานให้ฉันได้เป็นอย่างดี
— Jerad Rutnam

ฉันเปรียบเทียบวิธีกำหนดค่า repo ของฉันและทุกสาขาก็เหมือนกัน แต่ในสาขาเดียวฉันไม่สามารถใช้git push: / สิ่งนี้ใช้ได้กับฉันเช่นกัน: git push origin HEAD:my_branch_name.
— iaforek

6

สำหรับกรณีของฉันไม่มีวิธีแก้ปัญหาอื่นใดที่ใช้ได้ผล ฉันต้องทำการสำรองไฟล์ที่แก้ไขใหม่ (แสดงด้วยgit status) และเรียกใช้ไฟล์git reset --hard. สิ่งนี้ทำให้ฉันสามารถปรับระบบกับเซิร์ฟเวอร์ระยะไกลได้ การเพิ่มไฟล์ที่แก้ไขใหม่และเรียกใช้

git add .
git commit -am "my comment"
git push

ทำเคล็ดลับ ฉันหวังว่านี่จะช่วยใครบางคนเป็นทางออก "โอกาสสุดท้าย"


4

ตอนนี้ดูเหมือนว่าคุณอยู่ในสาขาการพัฒนา คุณมีสาขาการพัฒนาตามแหล่งกำเนิดของคุณหรือไม่? git push origin developถ้าไม่ได้ลอง git pushจะใช้งานได้เมื่อทราบเกี่ยวกับสาขาการพัฒนาที่มาของคุณ

ในการอ่านเพิ่มเติมฉันจะดูที่หน้าgit-push manโดยเฉพาะอย่างยิ่งในส่วนตัวอย่าง


4

หากต้องการเจาะจงหากคุณต้องการผสานบางสิ่งเพื่อเชี่ยวชาญคุณสามารถทำตามขั้นตอนด้านล่างนี้

git add --all // If you want to stage all changes other options also available
git commit -m "Your commit message"
git push // By default when it clone is sets your origin to master or you would have set sometime with git push -u origin master.

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

git push origin develop // It will create a remote branch with name "develop".

หากคุณต้องการสร้างสาขาอื่นที่ไม่ใช่ชื่อสาขาภายในของคุณคุณสามารถทำได้ด้วยคำสั่งต่อไปนี้

git push origin develop:some-other-name

2

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

git init

จากนั้นคุณสามารถยอมรับและผลักดันการอัปเดตให้เชี่ยวชาญได้


1
ขอบคุณ! ในกรณีของฉันพิมพ์: git initและเปิดแท็บคำสั่งใหม่พิมพ์:git push origin branch_name
— s7ven

2

สิ่งนี้เกิดขึ้นกับฉันเมื่อฉัน^Cอยู่ระหว่างgit pushGitHub อย่างไรก็ตาม GitHub ไม่ได้แสดงว่ามีการเปลี่ยนแปลง

ในการแก้ไขฉันได้ทำการเปลี่ยนแปลงโครงสร้างการทำงานของฉันมุ่งมั่นและผลักดันอีกครั้ง มันทำงานได้ดีอย่างสมบูรณ์


2

เรื่องนี้เกิดขึ้นกับฉัน ฉันเพิ่งยืนยันการเปลี่ยนแปลงอีกครั้งจากนั้นก็ผลักดัน


2

ฉันลองหลายวิธีรวมทั้งกำหนดไว้ที่นี่ สิ่งที่ฉันได้คือ

  • ตรวจสอบให้แน่ใจว่าชื่อของที่เก็บถูกต้อง วิธีที่ดีที่สุดคือคัดลอกลิงก์จากไซต์ที่เก็บและวางใน git bash

  • ตรวจสอบให้แน่ใจว่าคุณได้ยืนยันไฟล์ที่เลือกแล้ว

    git commit -m "Your commit here"
    
  • หากทั้งสองขั้นตอนไม่ได้ผลให้ลอง

    git push -u -f origin master


1

คุณสามารถลองทำสิ่งต่อไปนี้แทน คุณไม่ต้องไปที่master; คุณสามารถบังคับให้ผลักดันการเปลี่ยนแปลงจากสาขาของคุณได้โดยตรง

ตามที่อธิบายไว้ข้างต้นเมื่อคุณทำการ rebase คุณกำลังเปลี่ยนประวัติในสาขาของคุณ ดังนั้นหากคุณพยายามทำตามปกติgit pushหลังจาก rebase Git จะปฏิเสธเนื่องจากไม่มีเส้นทางโดยตรงจากการคอมมิตบนเซิร์ฟเวอร์ไปยังคอมมิตในสาขาของคุณ แต่คุณจะต้องใช้-fหรือ--forceตั้งค่าสถานะเพื่อบอก Git ว่าใช่คุณรู้จริงๆว่าคุณกำลังทำอะไรอยู่ เมื่อทำการกดแรงขอแนะนำอย่างยิ่งให้คุณตั้งค่าการกำหนดค่าของคุณpush.defaultเป็นแบบง่ายซึ่งเป็นค่าเริ่มต้นใน Git 2.0 เพื่อให้แน่ใจว่าการกำหนดค่าของคุณถูกต้องให้รัน:

$ git config --global push.default simple

เมื่อถูกต้องคุณสามารถเรียกใช้:

$ git push -f

และตรวจสอบคำขอดึงของคุณ ควรปรับปรุง!

ไปที่ด้านล่างของHow to Rebase a Pull Requestสำหรับรายละเอียดเพิ่มเติม


0

สิ่งนี้เกิดขึ้นกับฉันเมื่อฉันพยายามผลักดันจากสาขาใหม่และฉันใช้git push origin masterแทน คุณควร:

  • ใช้: git push origin your_new_branchถ้าคุณต้องการให้สาขานี้เกิดขึ้นใน repo ระยะไกลด้วย
  • อื่นตรวจสอบสิ่งที่ผสานสาขาหลักของคุณแล้วดันไปจากต้นแบบเพื่อ repo git merge origin masterคอมไพล์ด้วย

สรุป: ประเด็นที่นี่คือคุณควรตรวจสอบว่าคุณเสนอพารามิเตอร์ที่สองสำหรับการผสานคอมไพล์ ดังนั้นหากคุณอยู่ใน master use master เป็นพารามิเตอร์ที่สองหากคุณอยู่ใน new_branch ให้ใช้ค่านี้เป็นพารามิเตอร์ที่สองหากคุณต้องการเก็บสาขานี้ไว้ใน repo อื่นระยะไกลให้เลือกใช้ตัวเลือกที่สองด้านบนแทน


-1

ลองใช้git add -Aแทนgit add .


1
สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถาม เมื่อคุณมีเพียงพอชื่อเสียงคุณจะสามารถที่จะแสดงความคิดเห็นในโพสต์ใด ๆ ; แทนที่จะให้คำตอบที่ไม่จำเป็นต้องชี้แจงจากผู้ถาม - จากรีวิว
— Davis Herring

-6
git push origin master

ไม่รู้ว่าทำไมโหวตไม่ดีมากมายนี่คือสิ่งที่ได้ผลสำหรับฉัน git push origin master, git push origin คนเดียวแกล้งทำงาน แต่ไม่ได้ผลใครจะรู้ว่าการตั้งค่า upstream หรืออะไรก็ช่วยได้เหมือนกัน
— FantomX1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.