Skip to content

Git

Merge two Git repositories

https://stackoverflow.com/questions/1425892/how-do-you-merge-two-git-repositories

git remote add origin <link_to_remote_repo>

For example,

git remote add origin git@github.com:vutang/test_git_repo.git

All remote repo can be listed by using:

git remote -v

The results look like:

origin  git@github.com:vutang/test_git_repo.git (fetch)
origin  git@github.com:vutang/test_git_repo.git (push)

Branches

When a first commit is commited by git commit -m "mesage". A master branch is created.

git push origin master will push your local branch to remote.

  • Create a new local branch: git branch <branch-name>.
  • Switch to new branch: git checkout <branch-name>
  • Push to remote repo: git push <remote-name> <branch-name>
  • Pull a remote branch to local: git checkout <branch-name>

Before,

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/branch1
  remotes/origin/master

After,

* branch1
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/branch1
  remotes/origin/master
  • merge branches

    git merge <source> <dest>

Commit

  • Revert a commit in a branch:

git reset --hard <commit-hash-value>

Quản lý và đồng bộ nhánh (master & dev)

Kéo code mới nhất từ master về dev

Sử dụng khi nhánh master có cập nhật mới và bạn muốn lấy các thay đổi đó về dev để tiếp tục làm việc.

  • Sử dụng Merge (an toàn, khuyên dùng): giữ nguyên lịch sử thực tế, tạo thêm 1 merge commit.
git checkout dev
git fetch origin
git merge origin/master
git push origin dev
  • Sử dụng Rebase (lịch sử thẳng hàng): bốc các commit riêng của dev đặt lên trên cùng của master.
git checkout dev
git fetch origin
git rebase origin/master
git push origin dev --force-with-lease

Xử lý commit lỗi đã đẩy lên remote

Khi nhánh dev đang chứa một commit bị lỗi và bạn muốn hoàn tác nó.

  • Cách an toàn (dùng Revert): tạo một commit mới mang nội dung đảo ngược, không làm hỏng lịch sử chung của team.
git log --oneline -n 5       # Lấy mã hash của commit lỗi (VD: a1b2c3d)
git revert <mã_commit>       # Tạo commit đảo ngược
git push origin dev          # Đẩy lên remote bình thường
  • Cách xóa vĩnh viễn (dùng Reset): xóa không để lại dấu vết (cần cẩn thận nếu team dùng chung nhánh).
git reset --hard HEAD~1      # Quay lùi lại 1 commit để bỏ commit mới nhất
git push origin dev --force-with-lease

Đồng bộ tuyệt đối: ép dev giống hệt master (100%)

Sử dụng khi nhánh dev (cả local lẫn remote) bị rác lịch sử quá nhiều và bạn muốn nó trở thành bản sao hoàn hảo của master.

Warning

Thao tác này sẽ xoá vĩnh viễn các commit riêng trên dev.

  • Cách A: ghi đè bằng Reset (nhanh chóng)
git checkout dev
git fetch origin
git reset --hard origin/master          # Ép nhánh local giống hoàn toàn master
git push origin dev --force-with-lease  # Ghi đè nhánh remote trên server
  • Cách B: xóa hẳn và tạo lại (triệt để nhất)
git checkout master
git pull origin master
git branch -D dev                 # Xóa nhánh dev ở local
git push origin --delete dev      # Xóa nhánh dev trên server
git checkout -b dev               # Tạo nhánh dev mới cứng từ master
git push -u origin dev            # Đẩy nhánh mới lên server