2016-07-08 14 views
5

Xin lỗi, tôi là một người mới ở Git, và thật khó để tìm câu trả lời cho những câu hỏi khó hiểu (ít nhất là đối với tôi) trên Google.Điều gì sẽ xảy ra khi bạn git push nhưng ai đó đã cam kết một cái gì đó bạn không có trên repo địa phương của bạn?

Nói tên tôi là Joe và tôi đang làm việc trên một chương trình phần mềm với đồng nghiệp Bob của tôi.

Chúng ta có thượng nguồn Repo A và chúng tôi có máy nhái của Repo A trên máy địa phương của chúng tôi, nơi chúng tôi mã, cam kết, và đẩy kỳ đến cùng chi nhánh, nói chủ. Tôi biết đây không phải là cách tốt nhất để làm điều đó, nhưng vì lợi ích của ví dụ.

Bây giờ, điều gì sẽ xảy ra nếu cả hai chúng tôi làm việc trên một tệp. địa phương tập tin Bob rằng ông vẫn chưa đẩy có nội dung

// awesome program 
[some edits by Bob] 

My tập tin địa phương mà tôi vẫn chưa đẩy có nội dung

// awesome program 
[some edits I made] 

Bob đẩy, một giây sau đó tôi đẩy. Điều gì xảy ra bây giờ?

là các tập tin trên remote sẽ

// awesome program 
[some edits I made] 

hoặc

// awesome program 
[some edits Bob made] 

hoặc có lẽ, nếu có một cách để làm điều đó, tôi muốn nó được

// awesome program 
[some edits Bob made] 
[some edits I made] 

Xin lỗi vì sự vô lý: (

+2

Tại sao bạn không thử? Theo mặc định, Git sẽ từ chối không chuyển tiếp nhanh 'push'. – PetSerAl

Trả lời

5

Git sẽ từ chối yêu cầu của bạn. Nó sẽ cho bạn biết có những thay đổi mới trên máy chủ và làm cho bạn thực hiện việc kéo trước khi bạn có thể đẩy. Vì vậy, bạn sẽ kết thúc với

// awesome program 
[some edits Bob made] 
[some edits I made] 

trên máy cục bộ của bạn. Sau đó, bạn sẽ có thể đẩy điều đó ra điều khiển từ xa.

+1

@JosephA., 'Git pull' được định nghĩa rõ ràng là' git fetch' theo sau là 'git merge'. Tôi rất khuyên bạn nên đọc [bài đăng này] (http://longair.net/blog/2009/04/16/git-fetch-and-merge/) cho nền. Và một điều nữa: * xin vui lòng * đọc một cuốn sách giới thiệu về Git trước khi nghiêm túc dabbling với nó. Câu hỏi của bạn thể hiện sự thiếu kỹ năng kiểm soát phiên bản cơ bản nhất, và VC là một nhiệm vụ phức tạp đòi hỏi sự hiểu biết thấu đáo về những gì bạn làm. – kostix

+1

@JosephA., Kéo cũng có thể dẫn đến hành vi "chống lại xã hội" vì nó phá vỡ "mỗi tính năng được phát triển trên một nhánh riêng biệt và sau đó sáp nhập trở lại dòng chính" luồng công việc thường là * chuẩn * cho các dự án nghiêm trọng. Bạn có thể đọc [giải thích này từ người bảo trì Git] (https://git-blame.blogspot.ru/2012/03/fun-with-first-parent.html) để biết thêm thông tin cơ bản. Cách sử dụng kích hoạt hạnh phúc của 'git pull' là những gì phá vỡ luồng công việc của nhánh/bugfix. – kostix

1

Tôi không chắc chắn 100% rằng đây là những gì bạn đang tìm kiếm để làm, nhưng khi bạn cam kết, cần có một phiên bản mới được tạo ra. Mỗi bản sửa đổi mới sẽ thay thế phiên bản trước đó. Xem liệu thông tin này có giúp ích: Git Squash Commits

3

Đầu tiên: bạn không thể đẩy một cách bình thường với thông thường git push vì khi bạn ở trên máy chủ cục bộ, chủ từ xa của bạn đã thay đổi. do đó git đề nghị bạn thực hiện một lực đẩy với tùy chọn -f. tức là git push -f Nhưng Không được khuyến khích thực hiện lực đẩy trên nhánh chia sẻ trừ khi bạn có lý do công bằng như interactive rebasing!

Thứ hai: Theo thông báo git này, bạn được thông báo rằng có điều gì đó đang xảy ra với kho lưu trữ từ xa của bạn, do đó bạn thực hiện git status và đồng ý rằng "Your branch and 'origin/master' have diverged, and have 1 and 1 different commit(s) each, respectively.". bạn nên cập nhật repo địa phương của mình; vì vậy bạn đang thực hiện một số git pull hoặc trong trường hợp này một lệnh tốt hơn, git pull --rebase và đáng ngạc nhiên!Git cũng từ chối kéo của bạn và nói rằng bạn có xung đột trong ví dụ tệp. đó là vì cả bạn và Bob đều đã chỉnh sửa cùng một tệp và cùng một dòng!

Cuối cùng: Xem điều này link và giải quyết xung đột. bạn có thể giữ các thay đổi của bạn hoặc của Bob hoặc cả hai. sau đó cam kết các thay đổi và git push cũng cập nhật repo từ xa của bạn. và đó là nó !!!

Các vấn đề liên quan