Điều gì sẽ git remote -v show
trả lại khi nói đến nguồn gốc?
Nếu nguồn gốc trỏ đến github, trạng thái phải được cập nhật và không đi trước bất kỳ repo từ xa nào. Ít nhất, với Git1.6.5 mà tôi đang sử dụng để kiểm tra nhanh.
Dù sao, để tránh điều này, hãy xác định rõ ràng repo từ xa của nhánh chính:
$ git config branch.master.remote yourGitHubRepo.git
thì a git pull origin master
, theo sau là a git status
sẽ trả về trạng thái sạch (không có phía trước).
Tại sao? bởi vì master gốc get fetch (được bao gồm trong git pull origin master) sẽ không chỉ cập nhật FETCH_HEAD
(như Charles Bailey giải thích trong câu trả lời của mình ) mà còn cập nhật "nhánh chính từ xa" trong kho lưu trữ Git cục bộ của bạn.
Trong trường hợp đó, máy chủ cục bộ của bạn dường như sẽ không còn "đi trước" máy chủ từ xa nữa.
Tôi có thể kiểm tra điều này, với git1.6.5:
Đầu tiên, tôi tạo một 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"
Tôi mô phỏng một repo GitHub bằng cách tạo một repo trần (một repo có thể nhận được đẩy từ mọi nơi)
PS D:\git\tests\pullahead\workrepo> cd ..
PS D:\git\tests\pullahead> git clone --bare workrepo github
Tôi thêm một modif vào repo đang làm việc của mình, mà tôi đẩy sang repo github (được thêm vào dưới dạng điều khiển từ xa)
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
Tôi tạo một kho lưu trữ gia đình, sao chép của GitHub, trong đó tôi thực hiện một số sửa đổi, được đẩy lên 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
Sau đó tôi sao chép workrepo cho thử nghiệm đầu tiên
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(-)
Trong repo đó, trạng thái git có đề cập đến địa lý chính trước ' 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)
Nhưng đó origin
không phải là 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)
Nhưng nếu tôi lặp lại trình tự trong repo có nguồn gốc là github (hoặc không có nguồn gốc nào cả, chỉ là 'github' từ xa được xác định), trạng thái là sạch:
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)
Nếu tôi chỉ origin
trỏ vào github
, status
git1.6.5 sẽ sạch.
Nó có thể có một cảnh báo 'phía trước' cho git trước đó, nhưng dù sao, một git config branch.master.remote yourGitHubRepo.git
định nghĩa rõ ràng sẽ có thể xử lý điều đó, ngay cả với các phiên bản đầu tiên của Git.
git push
ý chí dường như cũng giải quyết được nó (báo cáo "tất cả được cập nhật").