Apa git remote -v show
pengembalian ketika datang ke asal?
Jika origin menunjuk ke github, statusnya harus up to date, dan tidak mendahului remote repo. Setidaknya, dengan Git1.6.5 yang saya gunakan untuk pengujian cepat.
Bagaimanapun, untuk menghindari ini, tentukan secara eksplisit repo jarak jauh dari cabang master:
$ git config branch.master.remote yourGitHubRepo.git
lalu a git pull origin master
, diikuti dengan a git status
harus mengembalikan status bersih (tidak di depan).
Mengapa? karena master get fetch origin (termasuk dalam master git pull origin) tidak hanya akan memperbarui FETCH_HEAD
(seperti yang dijelaskan Charles Bailey dalam jawabannya ), tetapi juga akan memperbarui "cabang master jarak jauh" dalam repositori Git lokal Anda.
Dalam hal ini, master lokal Anda tampaknya tidak lagi berada "di depan" dari master jarak jauh.
Saya bisa mengujinya, dengan git1.6.5:
Pertama saya membuat workrepo:
PS D:\git\tests> cd pullahead
PS D:\git\tests\pullahead> git init workrepo
Initialized empty Git repository in D:/git/tests/pullahead/workrepo/.git/
PS D:\git\tests\pullahead> cd workrepo
PS D:\git\tests\pullahead\workrepo> echo firstContent > afile.txt
PS D:\git\tests\pullahead\workrepo> git add -A
PS D:\git\tests\pullahead\workrepo> git commit -m "first commit"
Saya mensimulasikan repo GitHub dengan membuat repo telanjang (yang dapat menerima push dari mana saja)
PS D:\git\tests\pullahead\workrepo> cd ..
PS D:\git\tests\pullahead> git clone --bare workrepo github
Saya menambahkan modif ke repo kerja saya, yang saya dorong ke repo github (ditambahkan sebagai remote)
PS D:\git\tests\pullahead> cd workrepo
PS D:\git\tests\pullahead\workrepo> echo aModif >> afile.txt
PS D:\git\tests\pullahead\workrepo> git ci -a -m "a modif to send to github"
PS D:\git\tests\pullahead\workrepo> git remote add github d:/git/tests/pullahead/github
PS D:\git\tests\pullahead\workrepo> git push github
Saya membuat repo rumah, kloning dari GitHub, di mana saya membuat beberapa modifikasi, didorong ke GitHub:
PS D:\git\tests\pullahead\workrepo> cd ..
PS D:\git\tests\pullahead> git clone github homerepo
PS D:\git\tests\pullahead> cd homerepo
PS D:\git\tests\pullahead\homerepo> type afile.txt
firstContent
aModif
PS D:\git\tests\pullahead\homerepo> echo aHomeModif1 >> afile.txt
PS D:\git\tests\pullahead\homerepo> git ci -a -m "a first home modif"
PS D:\git\tests\pullahead\homerepo> echo aHomeModif2 >> afile.txt
PS D:\git\tests\pullahead\homerepo> git ci -a -m "a second home modif"
PS D:\git\tests\pullahead\homerepo> git push github
Saya kemudian menggandakan workrepo untuk percobaan pertama
PS D:\git\tests\pullahead\workrepo4> cd ..
PS D:\git\tests\pullahead> git clone workrepo workrepo2
Initialized empty Git repository in D:/git/tests/pullahead/workrepo2/.git/
PS D:\git\tests\pullahead> cd workrepo2
PS D:\git\tests\pullahead\workrepo2> git remote add github d:/git/tests/pullahead/github
PS D:\git\tests\pullahead\workrepo2> git pull github master
remote: Counting objects: 8, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From d:/git/tests/pullahead/github
* branch master -> FETCH_HEAD
Updating c2763f2..75ad279
Fast forward
afile.txt | Bin 46 -> 98 bytes
1 files changed, 0 insertions(+), 0 deletions(-)
Dalam repo itu, status git menyebutkan master geing sebelum ' origin
':
PS D:\git\tests\pullahead\workrepo5> git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
nothing to commit (working directory clean)
Tapi itu origin
bukan github:
PS D:\git\tests\pullahead\workrepo2> git remote -v show
github d:/git/tests/pullahead/github (fetch)
github d:/git/tests/pullahead/github (push)
origin D:/git/tests/pullahead/workrepo (fetch)
origin D:/git/tests/pullahead/workrepo (push)
Tetapi jika saya mengulangi urutan dalam repo yang memiliki asal ke github (atau tidak ada asal sama sekali, hanya 'github' jarak jauh yang ditentukan), statusnya bersih:
PS D:\git\tests\pullahead\workrepo2> cd ..
PS D:\git\tests\pullahead> git clone workrepo workrepo4
PS D:\git\tests\pullahead> cd workrepo4
PS D:\git\tests\pullahead\workrepo4> git remote rm origin
PS D:\git\tests\pullahead\workrepo4> git remote add github d:/git/tests/pullahead/github
PS D:\git\tests\pullahead\workrepo4> git pull github master
remote: Counting objects: 8, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From d:/git/tests/pullahead/github
* branch master -> FETCH_HEAD
Updating c2763f2..75ad279
Fast forward
afile.txt | Bin 46 -> 98 bytes
1 files changed, 0 insertions(+), 0 deletions(-)
PS D:\git\tests\pullahead\workrepo4> git status
# On branch master
nothing to commit (working directory clean)
Jika saya hanya origin
menunjuk github
, status
akan bersih untuk git1.6.5.
Ini mungkin dengan peringatan 'di depan' untuk git sebelumnya, tetapi bagaimanapun, sebuah git config branch.master.remote yourGitHubRepo.git
definisi secara eksplisit harus dapat menangani itu, bahkan dengan versi awal Git.
git push
juga akan menyelesaikannya (melaporkan "semua terbaru").