Sự khác biệt giữa cam kết git cam và phạm git đẩy phạm vi là gì?


895

Trong hướng dẫn Git mà tôi đang thực hiện, git commitđược sử dụng để lưu trữ những thay đổi bạn đã thực hiện.

Những gì được git pushsử dụng cho sau đó?


83
Bạn cũng có thể kiểm tra "áo choàng Git" đã giúp tôi hiểu rất nhiều về khái niệm này: ndpsoftware.com/git-chcoateet.html
adriendenat 31/03/13

Đây là một mánh gian lận khác: atlassian.com/git/tutorials/atlassian-git-chcoateet
Kolob Canyon

2
không có câu trả lời vì nó đã được cung cấp chỉ là một quan sát. đối với tôi, một cam kết thực sự nên được gọi là lưu và đẩy nên được gọi là cam kết. Vấn đề đặt tên cổ điển.
dublinx

Câu trả lời:


1619

Về cơ bản git commit" ghi lại các thay đổi vào kho lưu trữ " trong khi git push" cập nhật các ref từ xa cùng với các đối tượng liên quan ". Vì vậy, cái đầu tiên được sử dụng liên quan đến kho lưu trữ cục bộ của bạn, trong khi cái thứ nhất được sử dụng để tương tác với một kho lưu trữ từ xa.

Đây là một hình ảnh đẹp từ Oliver Steele , giải thích mô hình git và các lệnh:

Lệnh truyền dữ liệu Git

Đọc thêm về git pushgit pulltrên GitReady.com (bài viết tôi đề cập đầu tiên)


20
Đây là nguồn ban đầu: laseele.com/archives/2008/05/my-git-workflow với một hình ảnh khác về quy trình công việc git
tanascius

9
@ben github là một giải pháp lưu trữ công khai, "trên đám mây", git pushđể làm việc với. Trong thực tế, đích đến git pushcó thể là bất kỳ kho git nào . Nó có thể nằm trên ổ cứng cục bộ của riêng bạn trong một thư mục khác ( git remote add clone ~/proj/clone.git; git push clone masterhoặc git push ~/proj/clone.git master, ví dụ), hoặc một kho lưu trữ git mà máy chủ của riêng bạn phục vụ.
Ông già Noel

2
vậy ... bạn cần đẩy trước hay cam kết trước?
Kokodoko

5
@Piet nó bắt đầu tại không gian làm việc của bạn, nơi bạn sửa đổi các tệp. Sau đó, bạn thêm chúng vào chỉ mục, cam kết chúng vào kho lưu trữ cục bộ và - cuối cùng - đẩy chúng vào kho lưu trữ từ xa
tanascius

2
@ Mr.Hyde không có điều đó là không thể. Git như một điều khiển phiên bản phân tán yêu cầu bạn phải có một bản sao cục bộ.
tanascius

215

cam kết : thêm các thay đổi vào kho lưu trữ cục bộ

đẩy : để chuyển (các) cam kết cuối cùng đến một máy chủ từ xa


56

Chà, về cơ bản, git commit đưa các thay đổi của bạn vào repo cục bộ của bạn, trong khi git đẩy sẽ gửi các thay đổi của bạn đến vị trí từ xa.


9
đây là ngày thứ hai tôi sử dụng GIT. Khi tôi nhìn vào các câu trả lời ở trên, tôi vẫn không có được một bức tranh rõ ràng, nhưng câu trả lời của bạn chỉ đóng đinh nó. cảm ơn.
Bopha

1
git pushtải lên các tệp cập nhật thực tế hoặc một số tệp "khác" đặc biệt không?
đa cấp

27

git pushđược sử dụng để thêm các cam kết bạn đã thực hiện trên kho lưu trữ cục bộ vào một kho lưu trữ từ xa - cùng với git pullđó, nó cho phép mọi người cộng tác.


26

Vì git là một hệ thống kiểm soát phiên bản phân tán, sự khác biệt là cam kết sẽ cam kết thay đổi đối với kho lưu trữ cục bộ của bạn, trong khi đó, đẩy sẽ đẩy các thay đổi lên tới một repo từ xa.


19

Cam kết : Ảnh chụp | Thay đổi | Lịch sử_record | Phiên bản | 'Lưu dưới dạng' của một kho lưu trữ. Kho Git = series (cây) của cam kết .

Kho lưu trữ cục bộ : kho lưu trữ trên máy tính của bạn.

Kho lưu trữ từ xa : kho lưu trữ trên một máy chủ ( Github ).

git commit: Nối một mới cam kết (cuối cùng cam kết + dàn dựng sửa đổi) đến địa phương kho. (Tất cả các cam kết được lưu trữ trong /.git)

git push, git pull: Đồng bộ hóa kho lưu trữ cục bộ với kho lưu trữ từ xa được liên kết . push- áp dụng các thay đổi từ cục bộ vào từ xa , pull- áp dụng các thay đổi từ xa vào cục bộ .


11

git commitghi lại những thay đổi của bạn vào kho lưu trữ cục bộ .

git push cập nhật các từ xa kho với những thay đổi tại địa phương.


20
Câu trả lời của bạn về cơ bản giống với câu trả lời này , nó không thêm bất cứ điều gì mới.

7

Ba điều cần lưu ý:

1) Thư mục làm việc ----- thư mục chứa tập tin mã của chúng tôi

2) Kho lưu trữ cục bộ ------ Đây là trong hệ thống của chúng tôi. Khi chúng tôi lần đầu tiên thực hiện lệnh CommIT thì Kho lưu trữ cục bộ này được tạo. ở cùng nơi có thư mục Làm việc của chúng tôi,
tệp Checkit (.git) được tạo.
Sau đó, khi chúng tôi cam kết, điều này sẽ lưu trữ những thay đổi chúng tôi thực hiện trong tệp của Thư mục làm việc vào Kho lưu trữ cục bộ (.git)

3) Kho lưu trữ từ xa ----- Điều này nằm bên ngoài hệ thống của chúng tôi như trên các máy chủ được đặt ở bất kỳ nơi nào trên thế giới. như github. Khi chúng tôi thực hiện lệnh PUSH thì các mã từ kho lưu trữ cục bộ của chúng tôi sẽ được lưu trữ vào Kho lưu trữ từ xa này


7

Chỉ muốn thêm các điểm sau:

Yon không thể đẩy cho đến khi bạn cam kết khi chúng tôi sử dụng git pushđể đẩy các cam kết được thực hiện trên nhánh cục bộ của bạn đến một kho lưu trữ từ xa.

Các git pushlệnh hai đối số:

Một tên từ xa, ví dụ, origin Tên chi nhánh, ví dụ,master

Ví dụ:

git push  <REMOTENAME> <BRANCHNAME> 
git push  origin       master

4

Một sự tương tự rất thô thiển: nếu chúng ta so sánh git commitvới việc lưu một tệp đã chỉnh sửa, thì git pushsẽ sao chép tệp đó sang một vị trí khác.

Xin đừng loại bỏ sự tương tự này ra khỏi bối cảnh này - cam kết và đẩy không hoàn toàn giống như lưu một tệp đã chỉnh sửa và sao chép nó. Điều đó nói rằng, nó nên giữ để so sánh vì lợi ích.


1

Sẽ dễ hiểu hơn khi sử dụng các lệnh git addcommitnếu bạn tưởng tượng một tệp nhật ký đang được duy trì trong kho lưu trữ của bạn trên Github. Tệp nhật ký của một dự án điển hình đối với tôi có thể trông giống như:

---------------- Day 1 --------------------
Message: Completed Task A
Index of files changed: File1, File2

Message: Completed Task B
Index of files changed: File2, File3
-------------------------------------------

---------------- Day 2 --------------------
Message: Corrected typos
Index of files changed: File3, File1
-------------------------------------------
...
...
...and so on

Tôi thường bắt đầu một ngày của tôi với một git pullyêu cầu và kết thúc nó với một git pushyêu cầu. Vì vậy, mọi thứ trong hồ sơ của một ngày tương ứng với những gì xảy ra giữa chúng. Trong mỗi ngày, có một hoặc nhiều nhiệm vụ hợp lý mà tôi hoàn thành yêu cầu thay đổi một vài tệp. Các tập tin được chỉnh sửa trong nhiệm vụ đó được liệt kê trong một chỉ mục.

Mỗi tác vụ phụ này (Nhiệm vụ A và Nhiệm vụ B ở đây) là các cam kết riêng lẻ. Các git addlệnh bổ sung thêm file vào danh sách 'Index của tập tin đã thay đổi'. Quá trình này cũng được gọi là dàn dựng và trong hồ sơ thực tế đã thay đổi các tập tin và những thay đổi được thực hiện. Các git commithồ sơ lệnh / để hoàn tất những thay đổi và danh sách chỉ số tương ứng cùng với một thông báo tùy chỉnh có thể được sử dụng để tham khảo sau này.

Hãy nhớ rằng bạn vẫn chỉ thay đổi bản sao cục bộ của kho lưu trữ chứ không phải bản sao trên Github. Sau này, chỉ khi bạn làm mộtgit push hiện tất cả các thay đổi được ghi lại này, cùng với các tệp chỉ mục của bạn cho mỗi cam kết, mới được đăng nhập vào kho lưu trữ chính (trên Github).

Ví dụ, để có được mục nhập thứ hai trong tệp nhật ký tưởng tượng đó, tôi đã thực hiện:

git pull
# Make changes to File3 and File4
git add File3 File4
# Verify changes, run tests etc..
git commit -m 'Corrected typos'
git push

Tóm lại, git addgit commitcho phép bạn chia nhỏ một thay đổi đối với kho lưu trữ chính thành các thay đổi phụ logic có hệ thống. Như các câu trả lời và nhận xét khác đã chỉ ra, có rất nhiều cách sử dụng chúng. Tuy nhiên, đây là một trong những cách sử dụng phổ biến nhất và nguyên tắc thúc đẩy Git là một hệ thống kiểm soát sửa đổi nhiều giai đoạn không giống như các hệ thống phổ biến khác như Svn.


0

git commit không gì khác ngoài việc lưu các thay đổi của chúng tôi một cách chính thức, với mỗi cam kết chúng tôi đưa ra thông điệp cam kết, một khi chúng tôi thực hiện xong các cam kết, chúng tôi có thể đẩy nó ra từ xa để thấy sự thay đổi của chúng tôi trên toàn cầu

điều đó có nghĩa là chúng ta có thể thực hiện nhiều lần xác nhận trước khi đẩy từ xa (chúng ta có thể thấy danh sách các cam kết đã xảy ra và các thông báo cũng vậy) git lưu từng cam kết với id xác nhận là mã 40 chữ số

và tôi chỉ sử dụng git đẩy khi tôi muốn thấy sự thay đổi của mình trong điều khiển từ xa (Sau đó tôi sẽ kiểm tra xem mã của tôi có hoạt động trong jenkins không)


-1

Chà, về cơ bản, git commit đưa các thay đổi của bạn vào repo cục bộ của bạn, trong khi git đẩy sẽ gửi các thay đổi của bạn đến vị trí từ xa. Vì git là một hệ thống kiểm soát phiên bản phân tán, sự khác biệt là cam kết sẽ cam kết thay đổi đối với kho lưu trữ cục bộ của bạn, trong khi đó, đẩy sẽ thay đổi lên tới một repo từ xa

nguồn Google

http://gitref.org/basic/ liên kết này cũng sẽ rất hữu ích

https://git-scm.com/docs/git-commit


Câu trả lời này sao chép từ cho câu trả lời khác thành một.
Jeffery Opoku-Mensah

Nó không mang lại điều gì mới cho tất cả những gì đã được nói trước đó ...
hublo

-1

trong điều kiện cư sĩ, git commitlà bước trước khi git pushbạn chạy chúng theo cách đó để git thành công tệp của bạn vào github.


-2

git commitlà để cam kết các tập tin được dàn dựng trong repo cục bộ. git pushlà để chuyển tiếp nhanh hợp nhất nhánh chính của phía cục bộ với nhánh chính từ xa. Nhưng sự hợp nhất sẽ không luôn luôn thành công. Nếu từ chối xuất hiện, bạn phải để pullbạn có thể thành công git push.


Một số người có thể muốn buộc đẩy thay vì kéo. Nó phụ thuộc vào tình hình. Trên thực tế, nếu bạn bị từ chối cam kết trên một nhánh mà bạn không chia sẻ với người khác (ngay cả trên một repo từ xa), thì việc kéo chắc chắn không phải là điều bạn muốn làm.
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.