Làm cách nào để kiểm tra các thay đổi trên kho Git từ xa (nguồn gốc)?


249

Câu hỏi

Các lệnh Git để thực hiện quy trình công việc sau đây là gì?

Kịch bản

Tôi đã nhân bản từ một kho lưu trữ và thực hiện một số cam kết của riêng tôi với kho lưu trữ cục bộ của tôi. Trong khi đó, các đồng nghiệp của tôi đã cam kết với kho lưu trữ từ xa. Bây giờ tôi muốn:

  1. Kiểm tra xem có bất kỳ cam kết mới nào từ người khác trên kho lưu trữ từ xa không, nghĩa là origin?

  2. Giả sử có 3 cam kết mới trên kho lưu trữ từ xa kể từ lần kéo cuối cùng của tôi, tôi muốn phân biệt các cam kết của kho lưu trữ từ xa, tức là HEAD~3với HEAD~2, HEAD~2với HEAD~1HEAD~1với HEAD.

  3. Sau khi biết những gì đã thay đổi từ xa, tôi muốn nhận được những cam kết mới nhất từ ​​những người khác.

Phát hiện của tôi cho đến nay

Đối với bước 2: Tôi biết ký hiệu dấu mũ HEAD^, HEAD^^v.v. và ký hiệu dấu ngã HEAD~2, HEAD~3v.v.

Đối với bước 3: Đó là, tôi đoán, chỉ là a git pull.


3
Bản sao có thể có của Kiểm tra nếu cần kéo trong Git
Daniele Orlando

@Daniele mà câu trả lời bạn đang liên kết đến là tuyệt vời và thậm chí đi kèm với một tập lệnh bash tùy chỉnh. +1
gorbysbm

Câu trả lời:


255

Bạn có thể git fetch origincập nhật chi nhánh từ xa trong kho lưu trữ của bạn để trỏ đến phiên bản mới nhất. Đối với một khác biệt với điều khiển từ xa:

git diff origin/master

Có, bạn có thể sử dụng ký hiệu caret là tốt.

Nếu bạn muốn chấp nhận những thay đổi từ xa:

git merge origin/master

34
Các khác biệt trông đảo ngược. Tôi thấy nó dễ sử dụng git diff HEAD origin/masterhơn nên diff hiển thị những gì sẽ được áp dụng nếu tôi chấp nhận các thay đổi từ xa.
chơi cbliard

2
"git fetch origin" và "git show-Branch * master" rất hữu ích với tôi.
Léa Massiot

159
git remote update && git status 

Tìm thấy điều này trên câu trả lời để Kiểm tra xem có cần kéo trong Git không

git remote updateđể mang đến cho bạn từ xa cập nhật. Sau đó, bạn có thể thực hiện một trong một số điều, chẳng hạn như:

  1. git status -unosẽ cho bạn biết liệu chi nhánh bạn đang theo dõi đang ở phía trước, phía sau hoặc đã chuyển hướng. Nếu nó không nói gì, thì local và remote đều giống nhau.

  2. git show-branch *master sẽ hiển thị cho bạn các xác nhận trong tất cả các nhánh có tên kết thúc bằng master (ví dụ: master và origin / master).

Nếu bạn sử dụng -vvới git remote updatebạn có thể thấy các nhánh nào đã được cập nhật, vì vậy bạn không thực sự cần thêm bất kỳ lệnh nào.


Không đủ. Tôi phải làm git pull <remote> <branch>ngay sau đó ngay khi tôi cần đẩy, bởi vì tiền boa của chi nhánh địa phương của tôi đứng sau đối tác từ xa.
Overdrivr

3
@Overdrivr câu hỏi yêu cầu một cách để kiểm tra các thay đổi trước khi nhận các cam kết cho chi nhánh địa phương. vì vậy, vâng, bạn phải cập nhật chi nhánh địa phương sau khi kiểm tra các thay đổi.
Rajani Karuturi

Đây có phải là từ xa là nguồn gốc hoặc ngược dòng?
vikramvi

1
Tùy chọn -v đó không hoạt động. Vì git remote update -vtôi đã nhậnerror: unknown switch `v'
Shad

1
@Shad bạn nên làm git remote -v updatekhônggit remote update -v
Rajani Karuturi

34

Một cách tốt để có cái nhìn tổng hợp về những gì đang diễn ra "nguồn gốc" là:

git remote show origin

11
Nhưng lệnh đó không cho tôi biết có bao nhiêu cam kết về "nguồn gốc" kể từ lần kéo cuối cùng của tôi, phải không? Cách tôi hiểu nó "git remote show origin" là một hoạt động cục bộ và không đi qua mạng để lấy thông tin.
Lernkurve

24

Tôi chỉ sử dụng

git remote update
git status

Sau đó báo cáo có bao nhiêu cam kết đằng sau địa phương của tôi. (nếu có)

sau đó

git pull origin master

để mang đến cho địa phương của tôi cập nhật :)


13

Câu hỏi thường gặp của tôi là "bất cứ điều gì mới hoặc thay đổi trong repo" vì vậy whatchanged trở nên tiện dụng. Tìm thấy nó ở đây .

git whatchanged origin/master -n 1

1
không bao giờ mới lệnh này tồn tại. cảm ơn. đây là những gì tôi đang tìm kiếm
Saurabh Jain

11

Một giải pháp tiềm năng

Nhờ giải pháp của Alan Haggai Alavi, tôi đã tìm ra quy trình làm việc tiềm năng sau:

Bước 1:

git fetch origin

Bước 2:

git checkout -b localTempOfOriginMaster origin/master
git difftool HEAD~3 HEAD~2
git difftool HEAD~2 HEAD~1
git difftool HEAD~1 HEAD~0

Bước 3:

git checkout master
git branch -D localTempOfOriginMaster
git merge origin/master

13
Tại sao bạn cần tạo một nhánh tạm thời cho khác biệt giữa các phiên bản của điều khiển từ xa? bạn chỉ có thểgit diff origing/master^ origing/master^^
Pablo Marin-Garcia

@ PabloMarin-Garcia: Cảm ơn. Lúc đó tôi không biết điều đó.
Lernkurve

2

git statuskhông phải lúc nào cũng cho thấy sự khác biệt giữa chủ và gốc / chủ ngay cả sau khi tìm nạp. Nếu bạn muốn kết hợp git fetch origin && git statushoạt động, bạn cần chỉ định thông tin theo dõi giữa chi nhánh địa phương và nguồn gốc:

# git branch --set-upstream-to=origin/<branch> <branch>

Đối với chi nhánh chính:

git branch --set-upstream-to=origin/master master

0

vì nó đã không được đề xuất cho đến nay ... và tôi thấy nó khá hữu ích ...

tôi chỉ đơn giản là sử dụng

git fetch origin

để tìm nạp các thay đổi từ xa, sau đó tôi xem cả các cam kết từ xa cục bộ và đang chờ xử lý (và các thay đổi liên quan của chúng) bằng công cụ gitk đẹp ( https://git-scm.com/docs/gitk ) liên quan đến đối số --all như

gitk --all
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.