目錄
初始設定
-
使用者設定
git config --global user.name "username" git config --global user.email "username@imprld01.com"
#linux/macos git config --global core.autocrlf input #windows git config --global core.autocrlf true git config --global core.filemode false
#optimal git config --global --add core.compression -1 git config --global color.ui true git config --global core.editor vim git config --global ssh.variant ssh git config --global log.decorate short git config --global alias.last 'log -1 HEAD' git config --global alias.visual '!gitk --all' git config --global alias.unstage 'reset HEAD --' git config --global commit.template ~/git-template
-
Git設定檔位置
- 在使用者的家目錄下能找到
.gitconfig
,裡面記錄剛剛的使用者設定跟其他偏好設定 - 在Git專案下可以找到
.git
,裡面有一個檔案config
,裡面記錄著遠端儲存庫、分支等訊息
- 在使用者的家目錄下能找到
-
符號含意
HEAD # current position HEAD^^ # previous and previous HEAD~2 # previous and previous HEAD@{2} # previous and previous ORIG_HEAD # previous HEAD before reset FETCH_HEAD # position fetched from remote
常用指令
-
使用下面指令開始新的Git專案、新增修改、提交版本:
git init git add . git commit
-
可以使用下面指令取代
git commit
,直接附上簡短的commit message:git commit -m "one line message here"
-
可以使用下面指令結合
git add .
跟git commit
:git commit -a
-
新增變更後,或者想更新commit message,可以使用其中一條指令更新最近一次的commit:
git commit --amend
-
可以使用其中一條指令顯示之前的commit message:
git show git show a1b2c3 git show a1b2c3:path/file.py
-
可以使用其中一條指令顯示commit的歷史:
git log git log -g git log --all git log --graph git log --oneline git log --decorate # show tag git reflog # install gitk for ui interface gitk -a gitk --all
-
可以使用以下指令取消版本控制:
git rm --cached file2.py
-
清除沒有進行版本控制的檔案:
# exclude ignored files git clean -fd git clean -nd # dry run # include ignored files git clean -fdx git clean -ndx # dry run
-
把之前的commit拉到目前版本上作為新commit:
git revert c1b2a3
-
重設置特定commit版本,重設前可以先用
git reflog
確認版本跟commit ID
:git reset # reset to HEAD git reset --hard # reset to HEAD git reset c3b2a1 git reset --hard c3b2a1 # move to c3b2a1, and original changes git reset --soft c3b2a1 # move to c3b2a1, and original changes to be commited
-
放棄已經
git add
的修改:git checkout . git checkout -- . git checkout -- file3.py
-
取得現有的遠端儲存庫Git專案:
git clone https://github.com/projectNe10/Ne10
-
使用下面指令對branch基礎操作:
git branch my_new_branch a3b2c1 git branch -d that_branch git branch -m old_branch_name new_branch_name git checkout -b a_new_branch git checkout -b a_new_branch c5b6a7 git checkout a5b6c7 -- file5.py git checkout old_branch file6.py git blame -- file7.py # show that who changes file7.py line by line
-
創建新的commit來合併其他branch或舊commit:
git merge a8b9c0 git merge other_branch git merge --ff other_branch # fast-forward (linear-tree effect) git merge --no-ff other_branch # no fast-forward git cherry-pick c8b9a0 --no-commit
-
操作遠端儲存庫:
git remote remove origin git remote add origin URL git remote rename origin origin2 git push origin test:master git push origin test:refs/heads/master git push origin test:refs/for/master git push origin test:refs/for/refs/heads/master git pull git fetch -p origin # -p to remove unavailabe remote branch
-
透過下面指令一次操作多個commit:
git review git rebase origin/master git rebase -i HEAD~4 #可用來將多個commit重新整理過,一般會在push上Gerrit前進行 git rebase -i HEAD~3 master --onto dev_branch #可用來將多個commit移至新的branch上
-
使用下面指令來靜態標記commit:
#Tag: read-only commit pointer git tag git tag -n git tag -d tag_v0 git tag tag_v0 git tag -f tag_v0 git tag tag_v0 d1e2f3 # just light-weight git tag -a tag_v1 d3e2f1 # annotated many information git tag -am "message for this tag" tag_v1 d3e2f1 git show tag_v0 git fetch --tags git push --tags git push -f --tags git push origin tag_v2 git push -f origin tag_v2 git push origin :refs/tags/tag_v2 # delete remote tag git checkout -b new_branch_v2 tag_v2
-
使用下面指令補充commit message而不直接修改commit message:
git notes add f1e2d3 git notes add -m "messages in this note" f1e2d3 git notes remove f1e2d3 git notes show f1e2d3 git push origin "refs/notes/*" git push origin refs/notes/commits git fetch origin "refs/notes/*:refs/notes/*" git fetch origin refs/notes/commits:refs/notes/commits
Reference
- Git对库文件权限的管理与filemode配置详解_易生一世的博客-CSDN博客
- GIT常见问题记录_hjwzyy的博客-CSDN博客
- Git - Git Aliases
- Git: 讓你的代碼回到過去,git reset 與 git revert 的用處
- 3. Reset【教學3 改寫提交】 | 連猴子都能懂的Git入門指南 | 貝格樂(Backlog)
- 【狀況題】不小心使用 hard 模式 Reset 了某個 Commit,救得回來嗎? - 為你自己學 Git | 高見龍
- git clean 的用法详解_一定要学_一定要慎用_不头秃的码农的博客-CSDN博客_gitclean
- Git: Cherry-pick - 選擇某個分支的某些提交記錄 | Summer。桑莫。夏天
- 4. Cherry-pick【教學3 改寫提交】 | 連猴子都能懂的Git入門指南 | 貝格樂(Backlog)
- 【狀況題】如果你只想要某個分支的某幾個 Commit? - 為你自己學 Git | 高見龍
- Git 上標籤(Tagging) - Practical guide for git users 0.1 文档
- Git - git-notes Documentation
- [Git] tag 操作
comments powered by Disqus