Hoàn tác thay đổi:
Việc mắc sai lầm là điều khó tránh khỏi trong quá trình phát triển. Người dùng tạo ra rất nhiều trong số chúng khi viết code và khi sử dụng Git. Cho dù là bạn có vô tình thực hiện các thay đổi hoặc đã commit trước đó của bạn không phải là những gì bạn muốn, bạn cần phải hoàn tác các thay đổi. Git cung cấp một số cách để hoàn nguyên công việc đã commit.
Nếu bạn chưa thể push các commit của mình vào một kho lưu trữ từ xa, bạn có thể làm lại commit gần đây nhất bằng cách thay đổi giai đoạn đầu tiên mà bạn muốn thêm vào commit cuối cùng và sau đó cam kết lại với tùy chọn --amend.
Nếu bạn cần hoàn nguyên một số cam kết, bạn có thể sử dụng lệnh git reset . Hành động này di chuyển con trỏ nhánh tham chiếu lùi về commit mong muốn trong lịch sử nhánh. Các commit không mong muốn sẽ không bị xóa, nhưng chúng không còn là một phần của bất kỳ nhánh nào nữa.
Bạn có ba tùy chọn để hướng dẫn Git cách xử lý ảnh chụp nhanh từ các cam kết tách rời và thư mục làm việc trong khi thực hiện thiết lập lại:
1. Hard reset: (--hard) ghi đè mọi thứ. Con trỏ nhánh và HEAD được di chuyển để tham chiếu đến commit đã chọn, trong khi thư mục làm việc và khu vực dàn dựng được đồng bộ hóa với snapshot cũ đó. Để tránh mất bất kỳ thay đổi hoạt động nào, bạn có thể sử dụng lệnh git stash và git stash pop tương ứng.
2. Mixed reset: (--mixed) Đặt lại chỉ mục nhưng không phải cây làm việc (tức là các tệp đã thay đổi được giữ nguyên nhưng không được đánh dấu để cam kết) và báo cáo những gì chưa được cập nhật. Đây là hành động mặc định. Nếu -N được chỉ định, các đường dẫn đã loại bỏ được đánh dấu là có ý định thêm.
3. Soft reset: (--soft) hoạt động tương tự như Mixed reset, với việc bổ sung là thư mục làm việc được giữ nguyên. Soft reset hoặc hỗn hợp có thể được sử dụng để làm cho lịch sử sạch hơn bằng cách gộp nhiều commit vào một commit duy nhất.
Nếu bạn đã đẩy các commit của mình vào một kho lưu trữ từ xa, thì việc đặt lại sẽ trở nên phức tạp hơn. Hoàn tác các thay đổi mà không cần viết lại lịch sử thường là một lựa chọn tốt hơn. Lệnh git revert không xóa bất kỳ commit nào trước đó, nhưng tạo một commit mới chỉ hoàn tác các thay đổi của commit đã chỉ định. Điều này hoạt động tốt đối với các thay đổi đã được xuất bản vì sau đó lịch sử thực sự của kho lưu trữ được giữ nguyên.
Nếu bạn chỉ muốn hoàn tác các thay đổi của một tệp duy nhất chứ không phải toàn bộ commit, bạn có thể sử dụng kiểm tra git với đường dẫn tệp được chỉ định.
Điều khiển phân nhánh:
Git sử dụng mô hình cộng tác phân tán, có nghĩa là mọi nhà phát triển đều nhận được bản sao kho lưu trữ của riêng họ với lịch sử và cấu trúc nhánh hoàn chỉnh. Về mặt kỹ thuật, cả kho lưu trữ từ xa và cục bộ đều giống nhau. Tất cả chúng đều hoạt động với các đối tượng Git tiêu chuẩn như blobs, trees, commits, branches and tags.
Sự khác biệt ở đây là về bối cảnh sử dụng. Các kho lưu trữ từ xa chỉ dành cho việc chia sẻ và trao đổi code giữa các nhà phát triển, trong khi hầu như tất cả hoạt động trên các tệp đều xảy ra trong các máy tính của nhà phát triển trong kho lưu trữ cục bộ. Mỗi nhà phát triển có thể làm việc độc lập vì họ có mọi thứ họ cần trên máy tính của mình. Họ thậm chí không cần kết nối mạng với máy chủ từ xa cho đến khi họ quyết định chia sẻ công việc hoặc đồng bộ hóa kho lưu trữ của họ.
Để kiểm tra máy chủ từ xa nào bạn đã cấu hình, bạn có thể chạy lệnh git remote. Nếu bạn khởi tạo kho lưu trữ Git của mình bằng cách sao chép một điều khiển từ xa, thì bạn đã định cấu hình máy chủ từ xa cụ thể đó. Git sẽ theo mặc định đặt tên cho nguồn gốc máy chủ và tự động thực hiện một số tác vụ bổ sung cho phép môi trường làm việc tức thì của nhà phát triển. Tuy nhiên, để hiểu rõ hơn về những gì đang xảy ra, hãy xem cách định cấu hình và sử dụng kho lưu trữ từ xa.
Trước tiên, bạn cần thêm kết nối mới vào kho lưu trữ từ xa bằng lệnh git remote add, trong đó bạn chỉ định tên kho lưu trữ và URL nguồn. Các kết nối từ xa giống như các phím tắt hơn là các liên kết thực tế vào các kho lưu trữ khác. Theo thiết kế, Git hoàn toàn cách ly môi trường cục bộ đối với nhà phát triển và không tự động chuyển bất kỳ thông tin nào giữa các kho. Thay vào đó, bạn phải yêu cầu dữ liệu theo cách thủ công bằng cách sử dụng lệnh git fetch. Hành động đó tải xuống tất cả dữ liệu từ project từ xa mà bạn chưa có.
$ git remote
origin
$ git remote add work https://github.com/company/test
$ git remote
origin
work
$ git checkout --track work/feature
Branch feature set up to track remote branch feature from origin.
Switched to a new branch 'feature'
Bây giờ bạn sẽ có thể xem tất cả các nhánh đã xuất bản từ kho lưu trữ từ xa. Tên của các nhánh từ xa được tạo thành từ tên của kết nối từ xa (ví dụ: origin), theo sau là "/" và sau đó là tên của một nhánh trong kho lưu trữ từ xa đó. Nếu bạn chuyển sang một trong các nhánh đó, Git sẽ thông báo cho bạn rằng bạn đang ở trạng thái tách rời. Điều đó có nghĩa là Git sẽ không cho phép bạn thực hiện bất kỳ cam kết nào trực tiếp vào nhánh từ xa. Bạn có thể coi các nhánh từ xa là các nhánh chỉ đọc đại diện cho một ảnh chụp nhanh từ lần cuối cùng bạn chạy lệnh git fetch.
Để đóng góp cho nhánh ở xa, bạn cần tạo một nhánh cục bộ mới dựa trên chi nhánh ở xa. Bạn có thể làm điều đó với tùy chọn git checkout với --track. Điều đó tạo ra một nhánh cục bộ mới có cùng tên với từ xa, nếu không được chỉ định khác. Sau đó, mối quan hệ theo dõi giữa chi nhánh cục bộ mới và chi nhánh từ xa được thiết lập. Với điều đó, bạn có thể bắt đầu làm việc trong nhánh cục bộ và khi cần, bạn có thể gửi công việc của mình bằng lệnh git push. Máy chủ Git sẽ chấp nhận các thay đổi của bạn miễn là nó có thể chuyển tiếp nhanh nhánh từ xa. Nếu không, ai đó có thể đã đẩy thành công commit của họ trước bạn và trước tiên, bạn phải thực hiện tìm nạp Git lại. Theo mặc định, lệnh git push không chuyển các thẻ đến các máy chủ từ xa. Bạn phải tự mình đẩy thẻ đến một máy chủ được chia sẻ sau khi bạn đã tạo chúng.
Git fetch chỉ thay đổi nhánh từ xa của bạn và giữ nguyên nhánh theo dõi cục bộ. Bạn có thể thấy các thay đổi bằng cách so sánh các nhánh với lệnh git diff. Bạn có thể hợp nhất thủ công nhánh từ xa vào nhánh theo dõi cục bộ, trước khi cố gắng thực hiện lại thay đổi. Ngoài ra còn có một lệnh git pull kết hợp git fetch và git merge với nhau.
Chi nhánh cục bộ được tạo trong môi trường của bạn được giữ kín cho đến khi bạn quyết định xuất bản nó một cách rõ ràng. Để xuất bản nhánh cục bộ, bạn có thể sử dụng lệnh git push -u . Tùy chọn -u đặt mối quan hệ theo dõi giữa chi nhánh cục bộ và chi nhánh từ xa mới được tạo.