Notes sử dụng GIT (github)

Table of Contents

Notes sử dụng GIT (github)

Cấu hình

Khai báo cấu hình git trên máy tính

Mở git bash ra và lần lượt chạy các lệnh sau:

Nhớ thay {your_name} và {your_email} tương ứng với thông tin account github của bạn.

git config --global user.name {your_name}
git config --global user.email {your_email}
ssh-keygen -t rsa
ls ~/.ssh/

ssh-agent -s
ssh-add ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub

Tạo SH Key cho github

Truy cập https://github.com/settings/keys
Tạo một key mới

image

paste key copy ở bước cuối phần config trên vào và lưu lại.

Sử dụng cơ bản

Có 3 lệnh cơ bản:

  • pull: Để kéo mã nguồn, cập nhật những thay đổi từ trên github về local
  • push: Để đẩy mã nguồn, cập nhật code từ local lên github
  • commit: Có thể xem như đóng gói những thay đổi để chuẩn bị pull hay push

Có 2 quy tắc chính khi làm việc với github:

Quy tắc 1

Về quy tắc là mình phải luôn pull trước rồi mới bắt đầu làm việc, thêm, xóa, sửa code rồi mới push sau. Nhất là khi làm việc nhóm để đảm bảo cái mình edit luôn là cái mới nhất.

Quy tắc 2

Khi làm việc nhóm thì nên tạo branch riêng

Một số lệnh cơ bản:
(Để push code lên thì mình cũng nên thực hiện từ trên xuống hết các lệnh này)

# pull
git pull origin ten_branch

# add
git add --all

# Commit
git commit -m "ghi chú của bạn"

# Push
git push origin ten_branch

Lệnh khác (ít dùng hơn)

# Tạo branch
git branch ten_branch

# Thay đổi branch sử dụng
git checkout ten_branch

Giải quyết một số lỗi hay gặp

fatal: refusing to merge unrelated histories

git pull origin branchname --allow-unrelated-histories

https://stackoverflow.com/questions/37937984/git-refusing-to-merge-unrelated-histories-on-rebase

Tìm tên, đường dẫn của reposite mình đang có ở local

git config --get remote.origin.url

https://stackoverflow.com/questions/4076239/finding-out-the-name-of-the-original-repository-you-cloned-from-in-git

Git - Cloning Specific Commits

https://github.com/<repo_name>/tree/<commit_sha>

https://github.com/soiqualang/thongke_phanloai_raster/commit/1a222352b31fcdfc31e0ab7a325cf27b3dfdf2ac

https://github.com/soiqualang/thongke_phanloai_raster/tree/1a222352b31fcdfc31e0ab7a325cf27b3dfdf2ac

Clone The Repo And Checkout The Specific Commit

git clone -n <repo_name> 
git checkout <commit_sha>

Clone The Repo And Checkout The Specific Commit Into A Branch

git clone -n <repo_name>
git checkout -b <new_branch> <commit_sha>

https://coderwall.com/p/xyuoza/git-cloning-specific-commits

How to delete a git tag locally and remote

# delete local tag '12345'
git tag -d 12345
# delete remote tag '12345' (eg, GitHub version too)
git push origin :refs/tags/12345
# alternative approach
git push --delete origin tagName
git tag -d tagName

https://gist.github.com/mobilemind/7883996


Git Delete Commands

## Delete a remote branch
$ git push origin --delete <branch> # Git version 1.7.0 or newer 
$ git push origin :<branch> # Git versions older than 1.7.0

## Delete a local branch
$ git branch --delete <branch>
$ git branch -d <branch> # Shorter version
$ git branch -D <branch> # Force delete un-merged branches

## Delete a local remote-tracking branch
$ git branch --delete --remotes <remote>/<branch>
$ git branch -dr <remote>/<branch> # Shorter
$ git fetch <remote> --prune # Delete multiple obsolete tracking branches
$ git fetch <remote> -p # Shorter

https://gist.github.com/cmatskas/454e3369e6963a1c8c89


Git clone with username

You can leave out the password so that it won't be logged in your Bash history file:

git clone https://[email protected]/username/repository.git

It will prompt you for your password.

Alternatively, you may use:

git clone https://username:[email protected]/username/repository.git

https://stackoverflow.com/questions/10054318/how-do-i-provide-a-username-and-password-when-running-git-clone-gitremote-git


Git get user info from username

git config user.name
git config user.email

https://stackoverflow.com/questions/7552054/git-cli-get-user-info-from-username


How do I execute a Git command without being in the repository?

https://serverfault.com/questions/319088/use-git-commands-with-another-path-rather-than-the-actual-working-dir

It is very important that the -C option comes before actual command you want to execute:

Wrong: git add . -C some-path
Correct: git -C some-path add .


Delete commits from a branch in Git

https://stackoverflow.com/questions/1338728/delete-commits-from-a-branch-in-git

use reset --soft to delete local commit WITHOUT reverting work in progress!

Careful: git reset --hard WILL DELETE YOUR WORKING DIRECTORY CHANGES. Be sure to stash any local changes you want to keep before running this command.

Assuming you are sitting on that commit, then this command will wack it...

git reset --hard HEAD~1

The HEAD~1 means the commit before head.

Or, you could look at the output of git log, find the commit id of the commit you want to back up to, and then do this:

git reset --hard <sha1-commit-id>

If you already pushed it, you will need to do a force push to get rid of it...

git push origin HEAD --force

However, if others may have pulled it, then you would be better off starting a new branch. Because when they pull, it will just merge it into their work, and you will get it pushed back up again.

If you already pushed, it may be better to use git revert, to create a "mirror image" commit that will undo the changes. However, both commits will be in the log.


FYI -- git reset --hard HEAD is great if you want to get rid of WORK IN PROGRESS. It will reset you back to the most recent commit, and erase all the changes in your working tree and index.


Lastly, if you need to find a commit that you "deleted", it is typically present in git reflog unless you have garbage collected your repository.


git fatal: Not possible to fast-forward, aborting

git pull --rebase

https://stackoverflow.com/questions/13106179/error-fatal-not-possible-to-fast-forward-aborting


soiqualang_chentreu

Leave a Reply

Your email address will not be published. Required fields are marked *