狀態
Git 有三種狀態,你的文件可能處 于其中之一:已提交(committed)、已修改(modified)和已暫存(staged)。 已提交表示數據已經安全的 保存在本地數據庫中。 已修改表示修改了文件,但還沒保存到數據庫中。 已暫存表示對一個已修改文件的當前 版本做了標記,使之包含在下次提交的快照中。
tapd_22285581_1558941076_42.png
由此引入 Git 項目的三個工作區域的概念:Git 倉庫、工作目錄以及暫存區域。
基本的 Git 工作流程如下:
- 在工作目錄中修改文件。
- 暫存文件,將文件的快照放入暫存區域。
- 提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄。
你工作目錄下的每一個文件都不外乎這兩種狀態:已跟蹤或未跟蹤。 已跟蹤的文件是指那些被納入了 版本控制的文件,在上一次快照中有它們的記錄,在工作一段時間后,它們的狀態可能處于未修改,已修改或已 放入暫存區。 工作目錄中除已跟蹤文件以外的所有其它文件都屬于未跟蹤文件,它們既不存在于上次快照的記 錄中,也沒有放入暫存區。
tapd_22285581_1558942318_8.png
版本回退
HEAD是一個特別指針,它指向你正在工作中的本地分支的指針,可以將 HEAD 想象為當前分支的別名。
#^代表第一父提交,命令回退到HEAD的第一父提交也就是上一版本,--hard會將所有狀態的文件同樣回退到上一個版本的狀態
git reset --hard HEAD^
#回退到指定commit_id的版本,commit_id是用SHA1計算出來的一長串數字,只寫前幾位數字github也能找到相關版本
git reset --hard <commit_id>
查看日志
git log
git log --pretty=oneline
查看區別
git diff HEAD -- <file>
git show命令
git show
撤銷修改
#將暫存區的修改撤銷重新放回工作區,可以看到reset命令既可以回退版本,也可以撤銷修改
git reset HEAD <file>
#將文件在工作區的修改全部撤銷,就是讓這個文件回到最近一次git commit或git add時的狀態。這個命令中的--很重要,如果去掉--就變成了切換分支的命令
git checkout -- <file>
刪除文件
#相當于手動刪除文件,然后add添加到暫存區
git rm <file>
#刪錯了要恢復
git reset HEAD <file>
git checkout -- <file>
創建分支
#-b參數表示創建并切換
git checkout -b <branch_name>
#相當于
git branch dev
git checkout dev
查看當前分支
#列出所有分支,當前分支前面會標一個 * 號
git branch
合并分支
git merge <要合并的分支名稱>
#解決合并沖突,git status查看不能合并的文件,打開文件github會在沖突的地方做出標記,然后我們只需要手動編輯要保留的內容,然后提交文件
刪除本地和遠程分支
#刪除本地
git branch -d <branch_name>
#刪除遠程
git push origin --delete <branch_name>
儲藏工作
#儲藏之后再git status 就會出現nothing to commit, working tree clean,可以多次stash
git stash
#儲藏的工作列表
git stash list
恢復儲藏工作
#用stash apply恢復,但是恢復后,stash內容并不刪除,你需要用stash drop來刪除;
git stash apply
git stash drop
#stash pop恢復的同時把stash內容也刪了
git stash pop
#恢復刪除指定的stash,用stash list查看列表選中一個恢復,其中最近一次stash的num值最大,最早的num值為0,刪除一個stash后num值全部減一。
git stash apply stash@{<num>}
git stash drop stash@{<num>}
刪除未合并的分支
#將小d改為大D就可以了
git branch -D <branch_name>
查看遠程庫的信息
git remote
#查看更詳細的信息,顯示抓取(fetch)和推送(push)的遠程信息,如果沒有推送權限則不顯示push的遠程信息
git remote -v
推送分支
git push origin <branch_name>
抓取分支
#抓取過程中如果有沖突要先解決沖突
git pull
本地創建和遠程分支對應的分支
git checkout -b <branch_name> origin/<branch_name>
建立本地分支和遠程分支的關聯
git branch --set-upstream branch-name origin/branch-name
將提交歷史整理成直線
#存在風險,可完整閱讀官方文檔加深理解
git rebase
創建標簽
#在最近一次的commit上創建標簽
git tag <tag_name>
#在指定的commit上創建標簽
git tag <tag_name> <commit_id>
#創建帶有說明的標簽
git tag -a <tag_name> -m <text> <commit_id>
#查看標簽,按字母排序,而不是按時間排序
git tag
#查看標簽信息
git show <tag_name>
操作標簽
#刪除標簽
git tag -d <tag_name>
#推送單個標簽到遠程
git push origin <tag_name>
#一次性推送所有尚未推送到遠程的本地標簽
git push origin --tag
#刪除已經推送到遠程的標簽,冒號代表刪除
git tag -d <tag_name>
git push origin :refs/tags/<tag_name>
忽略特殊文件
Git工作區的根目錄下創建一個特殊的.gitignore文件,然后把要忽略的文件名填進去,Git就會自動忽略這些文件。
官方配置文件模版,使用時可根據實際情況組合一下。
如果某次需要添加被忽略的文件到Git
git add -f App.class
如果發現某個不應該被忽略的文件被忽略了
git check-ignore -v App.class
Git會告訴我們,.gitignore的第幾行規則忽略了該文件。
配置別名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
git config --global alias.last 'log -1'
刪除別名
#查看配置文件
vim .git/config
#將[alias]下面對應要刪除的別名那一行刪掉