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.