Quỳ hoa bảo điển Git – Blog của Tứn

Quỳ hoa bảo điển Git

Config editor default cho git

git config --global core.editor notepad

Show files change of a commit

git show --name-only a242ceb101a4d5a49233326661c82ec7d8792c85

Git Log & RefLog

Khi chúng ta cần truy xuất những gì chúng ta đã làm trên branch hiện tại thì Git log & reflog sẽ thực sự hữu hiệu cho việc đó.

  • git log: sẽ show những commit (option pretty=oneline)
  • git reflog: sẽ show những changes trong 1 –amend commit hoặc là commit gộp

Git Reset

Tại sao lại dùng git reset? Git reset sẽ cực kỳ hữu dụng trong các hoàn cảnh sau đây

  • Khi chúng ta cần undo lại hành động trước đó của mình.
  • Khi chúng ta cần combine tất cả các commit lại thành 1

Git reset cung cấp cho chúng ta những propety đi kèm để phục vụ nhu cầu của chúng ta. Để miêu tả một cách ngắn gọn thì đây là những behavior khi bạn dùng lệnh git reset với propety đi kèm dưới đây

  • --softuncommit changes, changes are left staged (index).
  • --mixed (default)uncommit + unstage changes, changes are left in working tree.
  • --harduncommit + unstage + delete changes, nothing left.

Sử dụng Git Reset để merge các commit lại thành 1

Giả sử bạn tạo 1 branch tên là feature/21927_backup từ develop, và sau đó bạn cứ code + commit + merge code latest từ develop về. Sau một hồi làm như vậy nhìn lại các commits của mình thì nó đã dài ngoằng. Và trông như thế này

Đây là đống commits của một tấm chiếu mới 😀

Bây giờ dự án yêu cầu khi tạo Pull Request vào develop thì không được để commit rác như thế này. Phải merge lại thành 1 commit có ý nghĩa. Nếu không thì PR của bạn sẽ bị reject.

Giờ mình sẽ chỉ các bạn cách làm điều đó. Và bí quyết đó là dùng Git Reset.

  • Đầu tiên bạn hãy chú ý commit đầu tiên của mình đó là f608b5e7: update behavior
  • Sau đó bạn chạy lệnh git log --pretty=oneline và tìm tới đoạn f608b5e7: update behavior
  • Tiếp theo đó bạn nhìn thêm xuống 1 tí nữa. là thấy commit trước đó (trươc f608b5e7 1 commit) từ develop. Bạn take note cái id của commit này. vd:
  • Sau đó bạn dùng lệnh git reset 6a40d88b731fc6dc54edabb6953ec674eb524752 để undo các changes của bạn kể từ commit này.
  • Tiếp đến bạn mở SDK lên sẽ thấy các file changes. Như vậy là bạn đang làm đúng.
  • Sau đó bạn chạy lệnh git add . để add tất cả các file changes vào stage.
  • Tiếp theo git commit -m "message cần gộp"
  • Tiếp đó git push -f để force push quyết định của bạn lên. Và bây giờ thì commit đã được merge lại thành 1 rồi đấy. Các bạn thử xem nhé

Sử dụng Git Rebase dể merge tất cả các commit lại thành 1

Tại sao lại dùng Git Rebase?

Dùng git rebase để đưa tất cả các commit của bạn lên trên đầu của commit tree. Cách này làm được chỉ khi nào bạn chưa merge bất kỳ commit nào từ nhánh khác về. Branch của bạn chỉ chưa các commit của bạn thì mới làm được

Hướng dẫn thực hiện git Rebase với GIT BASH

  1. Kiểm tra git log

Bạn chạy câu lệnh sau

git log

Sẽ thấy màn hình hiện ra như sau

Màn hình git log với các commit của bạn

2. Jump tới Git Log mà bạn cần

Nguyên tắc là bạn sẽ jump về điểm trước các commit của bạn.

Gõ lệnh

git rebase -i 6433efdf9d216d8f5f29656e2509bb34a4215238

3. Sửa các commit lại thành 1 commit

Một trình soạn thảo sẽ hiện lên và các bạn gõ từ khóa fixup để sửa các commit lại thành 1, nhớ chừa commit với id này lại nha 6433efdf9d216d8f5f29656e2509bb34a4215238

4. Đóng trình soạn thảo

5. Gọi lệnh force push để update các thay đổi cho nhánh của bạn

git push -f origin feature/your_branch_name

Sử dụng Cherry Pick để lấy các commit từ branch khác

Bài toán

Giả sử bạn vừa làm 1 function bên nhánh A check out từ develop. Bạn lại implement 1 function trên nhánh B checkout từ master. Và bạn có nhu cầu dùng lại function từ nhánh A vào trong nhánh B.

Đây là lý do Cherry Pick sẽ hữu dụng

Lấy 3 commits từ nhánh A bỏ qua nhánh B

Cách làm

1. Đầu tiên bạn checkout nhánh A.

Chạy git log --pretty=oneline để lấy những commit hash mình cần mang qua nhánh B.

Lấy giấy note lại các commit hash này

2. Tiếp theo checkout qua nhánh B

Chạy lệnh git cherry-pick hash-1 hash-2 hash-3

Vd: git cherry-pick 96e88af61776b1ab06b6f599fd227e367285296b abd311a8351804a14a32b1edfe45ddaaf0d161b3 2f79648e99dd544d072867d5069d7a4e522a03d4

3. Sau đó bạn push lên là xong

Zip những changes trong commit vừa push lên

git archive -o update.zip HEAD $(git diff --name-only HEAD^)

2 account git trên 1 máy

// Global git config path: C:\Users\your-account\.gitconfig
[credential "https://dev.azure.com/your-project-url-number-1/_git"]
	username = user-name-1@email.com
	useHttpPath = true
[credential "https://dev.azure.com/your-project-url-number-2/_git"]
	username = user-name-2@email.com
	useHttpPath = true

Ignore whole folder but keep some files

Refer: https://theapache64.github.io/git-do-not-ignore/

# Ignore all files in [platforms] folder but keep /platforms/android/app/build.gradle for android build
!/platforms/
/platforms/*
!/platforms/android/
/platforms/android/*
!/platforms/android/app/
/platforms/android/app/*
!/platforms/android/app/build.gradle
# End ignore [platforms] folder

Fix Gitlab cannot clone repository

Error: fatal: not a git repository

Solution:

1. Run this command
https://your-user-name@gitlab.com/project-name.git

2. Browser open ask you provide login infomation

3. Run this command again
https://gitlab.com/your-user-name/project-name.git

4. Ok now.

F G+ T

tuandph

Khởi đầu với .NET từ năm 2013 đến nay. Hiện tại mình đang làm full-stack developer. Yêu thích lập trình & chia sẽ kiến thức. Thời gian rảnh thường làm những tool vui vui và viết lách kể lệ sự đời.