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
--soft: uncommit changes, changes are left staged (index).--mixed(default): uncommit + unstage changes, changes are left in working tree.--hard: uncommit + 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

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=onelinevà tìm tới đoạnf608b5e7: 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
- 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

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

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.