Học về Git trong 30 phút - Phần II

I.Nhánh - Branch

Khi phát triển 1 tính năng mới của dự án , chúng ta sẽ phát triển trên 1 bản sao của dự án ban đầu , được gọi là một chi nhánh, Các chi nhánh này có lịch sử thay đổi khác nhau , độc lập với nhau.Cho đến khi bạn quyết định hợp nhất các chi nhánh lại vơi nhau dựa trân các lí do:

  • Ứng dụng của bạn sẵn sàng hoạt động , không có sự sai hỏng của code.
  • Một số tính năng có thể được phát triển ngay lập tức nhưng an toàn bởi nhiều người khác nhau
  • Các developer cóp thể làm việc trên chi nhánh của riêng họ mà không thay đổi code base của họ do công việc của người khác .
  • Khi không đưa ra được giải pháp dòng code tốt nhất thì thông thường, có thể phát triển 1 tính năng trong nhiều phiên trên các chi nhánh riêng biệt để có thể so sánh vơi nhau và đưa ra bản tốt nhất

1.Tạo 1 nhánh mới - git branch

Chi nhánh mặc định của mọi kho lưu trữ thường là master .Để tạo thêm 1 nhánh mới dùng lệnh: git branch <name> :

$ git branch branch_A

Một branch mới tên là branch_A sẽ được tạo , và nó giống y hệt như nhánh master

2.Chuyển nhánh - git checkout

Trước tiên , chúng ta chạy dòng lệnh : * git branch* để kiểm tra tất cả các nhánh hiện tại có trên repo của mình

$ git branch
  branch_A
* master

Hiện tai có 2 nhánh , master và branch_A, và nhánh master được đánh dấu * , nó có nghĩa là hiện tại chúng ta đang làm việc trên chi nhánh là master, mục đích bây giờ cần chuyển sang nhánh branch_A để làm việc .Chúng ta thực hiện lệnh : git checkout <branch_name>

$ git checkout branch_A

3. Merging branches - git merge Khi làm việc trên nhánh branch_A một số file sẽ thay đổi , để hoàn tất sự thay đổi đó , chúng ta cần commit chúng:

$ git add feature.txt
$ git commit -m "New feature complete."

tính năng mới đã hoàn thành , tiếp theo chúng ta trở về nhánh master:

$ git checkout master

Bây giờ để file feature.txt xuất hiện ở trong dự án của bạn , bạn cần merge nhánh branch_A vào phiên bản chính của dự án:

$ git merge branch_A

Chi nhánh chính master bây giờ đã được cập nhật.Và nhánh branch_A không cần thiết nữa và chúng ta có thể xóa:

$ git branch -d branch_A

II.Nâng cao

1.Kiểm tra sự khác nhau giữa các commit Mỗi commit đều lưu id duy nhất dưới dạng số hoặc symbol, để xem danh sách tất cả các commit và id của chúng , chúng ta có thể sử dụng lệnh git log:

$ git log

commit ba25c0ff30e1b2f0259157b42b9f8f5d174d80d7
Author: Tutorialzine
Date:   Mon May 30 17:15:28 2016 +0300

    New feature complete

commit b10cc1238e355c02a044ef9f9860811ff605c9b4
Author: Tutorialzine
Date:   Mon May 30 16:30:04 2016 +0300

    Added content to hello.txt

commit 09bd8cc171d7084e78e4d118a2346b7487dca059
Author: Tutorialzine
Date:   Sat May 28 17:52:14 2016 +0300

    Initial commit

Như các bạn thấy ở trên thì id của 1 commit khá dài tuy nhiên , nếu muốn xem chi tiết ở mỗi commit đã có những thay đổi gì thì bạn chỉ cần copy 1 vài số đầu của id đó:

$ git show b10cc123

commit b10cc1238e355c02a044ef9f9860811ff605c9b4
Author: Tutorialzine
Date:   Mon May 30 16:30:04 2016 +0300

    Added content to hello.txt

diff --git a/hello.txt b/hello.txt
index e69de29..b546a21 100644
--- a/hello.txt
+++ b/hello.txt
@@ -0,0 +1 @@
+Nice weather today, isn't it?

Để xem được sự khác nhau giữa 2 commit , chúng ta sử dụng lệnh với format: git diff [commit-from]..[commit-to]

$ git diff 09bd8cc..ba25c0ff

diff --git a/feature.txt b/feature.txt
new file mode 100644
index 0000000..e69de29
diff --git a/hello.txt b/hello.txt
index e69de29..b546a21 100644
--- a/hello.txt
+++ b/hello.txt
@@ -0,0 +1 @@
+Nice weather today, isn't it?

2.Lấy lại tập tin ở phiên bản trước đó

Cung cấp id của commit và tên file muốn lấy lại :

$ git checkout 09bd8cc1 hello.txt

3.. Fixing a commit

Nếu bạn nhận thấy rằng bạn đã gõ sai trong commit của mình, hoặc bạn đã quên thêm một tập tin và bạn thấy ngay sau khi bạn commit, bạn có thể dễ dàng khắc phục điều này bằng lệnh git commit --amend. Điều này sẽ thêm mọi thứ từ lần commit cuối cùng trở lại, và cố gắng thực hiện một commit mới. Điều này cho bạn cơ hội để sửacommit của bạn hoặc thêm nhiều tệp tin hơn.

Đối với các bản sửa lỗi phức tạp hơn không có trong commit cuối cùng (hoặc nếu bạn đã đẩy các thay đổi đã có), bạn phải sử dụng git revert. Điều này sẽ đưa tất cả những thay đổi mà một commit đã giới thiệu, đảo ngược chúng và tạo ra một commit mới hoàn toàn ngược lại.

Các committ mới nhất có thể được truy cập bằng HEAD.

$ git revert HEAD

Đối với các commit khác, tốt nhất là sử dụng một id.

$ git revert b10cc123

Khi hoàn nguyên cáccommit cũ hơn, hãy ghi nhớ rằng sự coflig rất có thể xuất hiện. Điều này xảy ra khi một tệp tin đã bị thay đổi bởi một lần commit gần đây hơn, và bây giờ Git không thể xác định được .Khi đó cần fix conflig