一、Git常用命令
1.git clone
1.1 git clone <url> #克隆遠程版本庫
1.2 git --version #查看git版本
1.3 git status #查看狀態
1.4 git config --list #查看git配置
2.git init
2.1 git init #初始化本地版本庫
3.git add
3.1 git add . #將當前新增或者修改過的文件加入到暫存區
git add --all . #將當前新增、修改或者刪除的文件加入到暫存區
3.2 git add <file> #跟蹤指定的文件
3.3 git add -i #進入交互模式將暫存區的文件挪出來
3.4 git add -f <file> #強制提交已忽略的文件
3.5
4.git commmit
4.1 git commit -m "commit message" #提交所有更改過的文件
4.2 git commit --amend #修改最後一次提交
5.git log
5.1 git log #查看當前分支指向的commit之前的提交歷史
git reflog #查看完整的提交歷史
5.2 git log -p <file> #查看指定文件的提交歷史
5.4 git log --patch -2 #查看最近2次提交的代碼的差異
5.5 git log --stat #顯示每次提交的統計信息
5.6 git log --pretty=oneline #每個提交顯示一行
5.7 git log --pretty=format:"%h - %an, %ar : %s" #顯示短hash、作者、多長時間以前、提交說明
5.8 git log --oneline --abbrev-commit --graph #可以看到整個commit樹結構,包括如何合併的
5.9 git log --abbrev-commit master..feature/001 #查看feature/001的那些commit還沒有合併到master中去
5.10 git log --abbrev-commit feature/001..master #查看那些commit在master上有但是feature/001還沒有
5.11 git log --abbrev-commit origin/master..HEAD #查看本地的修改還有多少沒有推送到遠程master上去
5.12 git log --abbrev-commit feature/001 feature/002 --not master #查看在feature分支上都有的commit,在master還沒有
5.13 git log --abbrev-commit feature/001...feature/002 #查看那些commit存在於兩個分支的某一個,但不是兩個分支都有
6.git checkout
6.1 git checkout HEAD <file> #撤銷指定的未提交文件的修改內容
6.2 git checkout <branch/tag> #切換到指定分支或標籤
6.3 git checkout -b feach001 origin/feach001 #創建本地分支並跟蹤遠程分支
6.4 git checkout -- <file> #用版本庫的文件替換工作區的文件
7.git reset
7.1 git reset --hard HEAD #撤銷工作目錄中所有修改文件的修改內容
7.4 git reset --hard HEAD^ #就可以回退到上一個版本
7.5 git reset --hard HEAD~5 #退回到HEAD之前的倒數第5個commit的狀態
7.6 git reset --hard d324644 #指定一個commit的hash值,回退到很老的版本
7.7 git reset --soft HEAD^ #
8.git branch
5.1 git branch #顯示所有本地分支
git branch -a #查看本地和遠程所有分支
5.2 git branch -vv #查看本地分支和遠程分支的對應關係
5.3 git branch <new-branch> #創建新分支
5.4 git branch -d <branch> #刪除本地分支
9.git tag
9.1 git tag #列出所有本地標籤
9.2 git tag <tagname> #基於最新提交創建標籤
9.3 git tag -d <tagname> #刪除標籤
9.4 git tag <tagName> <版本號> #把版本號打上標籤,版本號就是commit時,跟在旁邊的一串字母數字
9.5 git tag -a <tagname> -m "<說明>" #創建帶說明的標籤
10.git diff
10.1 git diff #查看工作區和暫存區變更內容
10.2 git diff --cached #暫存區和倉庫
10.3 git diff HEAD #工作區和倉庫
10.4 git diff feature/001 master #兩個分支之間的差異
10.5 git diff HEAD HEAD^ #兩次提交之間的差異
11.git pull
11.1 git pull <remote> <branch> #下載代碼及快速合併
11.2 git pull --rebase #執行變基式合併,讓commit的提交歷史看起來是一條直線
12.git push
12.1 git push <remote> <branch> #上傳代碼及快速合併
12.2 git push <remote> :<branch/tag-name> #刪除遠程分支或標籤
12.3 git push origin --tags #上傳所有標籤到遠程
12.4 git push origin <tagname> #推送某個標籤到遠程
12.5 git push -u origin master #把倉庫區的主分支master提交到遠程倉庫裏
12.6 git push -u origin <其他分支> #把其他分支提交到遠程倉庫
13.git romote
13.1 git remote -v #查看遠程版本庫信息
13.2 git remote show <remote> #查看指定遠程版本庫信息
13.3 git remote add <remote> <url> #添加遠程版本庫
13.4 git remote add origin https://github.com/name/name_cangku.git #把本地倉庫與遠程倉庫連接起來
14.git show
14.1 git show master #查看master分支指向那個commit
14.2 git show HEAD^ #查看當前分支的上一個commit
14.3 git show HEAD~2 #查看當前分支的上上個commit
14.4 git show <tagname> #查看標籤信息
15.git stash
15.1 git stash #將本地修改的內容暫存起來
15.2 git stash list #查看stash列表
15.3 git stash apply #將最近一次stash的內容恢復回來但是不刪除
git stash pop #恢復的同時把stash內容也刪了
15.4 git stash apply stash@{0} #恢復到指定的一次stash
15.5 git stash apply --index #如果執行git stash的時候有內容放入了暫存區,恢復的時候用此命令
15.6 git stash drop stash 名稱 #手動刪除掉某個stash
15.7 git stash --include-untracked #將暫存區中的內容,tracked和untracked的內容全都暫存
16.git rebase
16.1 git rebase -i HEAD~3 #調整最近3個commit
16.2 git rebase --continue
16.3 git rebase --abort
16.4 git rebase --skip
16.5 git rebase <branch> #衍合指定分支到當前分支
16.6 git rebase #把分叉的提交歷史“整理”成一條直線,看上去更直觀
17.git merge
17.1 git merge --abort #兩個分支merge時出現衝突,取消merge
17.2 git merge <branch> #合併指定分支到當前分支
17.3 git merge --no-ff <分支名字> #合併分支的時候禁用Fast forward模式,因爲這個模式會丟失分支歷史信息
雜項:
1.1 git mv <old> <new> #文件改名
1.2 git rm <file> #刪除文件
1.3 git rm --cached <file> #停止跟蹤文件但不刪除
1.4 git blame <file> #以列表方式查看指定文件的提交歷史
1.5 git revert <commit> #撤銷指定的提交
1.6 git check-ignore -v <file> #強制提交已忽略的文件
1.7 git fetch <remote> #從遠程庫獲取代碼
1.8 git config --global color.ui true #讓Git顯示顏色,會讓命令輸出看起來更醒目
二、操作流程
1.從git上拉代碼的流程
git stash --將本地修改暫存
git pull --將遠程分支的代碼拉到本地
git stash pop --將本地暫存的代碼釋放
2.對比兩個分支修改的文件
git diff A..B --stat
3.將本地的master分支和遠程的master分支做關聯
git branch --set-upstream-to=origin/master master
4.在本地創建分支develop,推送到遠程倉庫
git checkout -b develop #在本地創建develop分支,並切換到develop分支
git push -u origin develop #將本地develop分支推送到遠程倉庫
5.修改了工作區的內容,但是還沒有放入暫存區和倉庫,此時要拋棄這些修改
git reset --hard HEAD
6.修改了工作區的內容,放入了暫存區,但是沒有提交,此時要拋棄這些修改
git reset HEAD = git reset --mixed HEAD #將暫存區里加入的內容撤銷掉,然後在工作區重新修改代碼
git reset --hard HEAD #將暫存區和工作區的內容一次性抹掉
7.修改了工作區的內容,已經提交,此時要放棄這些修改
git reset --hard HEAD^ = git reset --hard commit 標識符
8.在本地commit,同時還推送到了遠程倉庫,此時要撤回
git revert HEAD #本地撤回commit操作
git push origin master #完美同步撤回遠程倉庫的commit操作了
9.在兩個分支合併的的時候出現衝突,取消,不想merge
git merge --abort
10.如果在本地merge後想要撤回
git reset --hard HEAD^
11.推送了merge之後的commit到遠程倉庫後想要撤回
①如果是要撤回已經push到遠程倉庫的merge操作
②在本地執行git revert -m 1 HEAD,再執行git push origin master,此時本地和遠程的提交歷史都會多一個commit出來,該commit的內容和合並之前的master指向的那個commit是一樣的,同時master此時指向最新的那個commit
③但是後面,如果要再次將release分支和master分支進行合併,此時是需要特殊處理的,再次在本地執行:git revert HEAD,git push origin master。就是再次將master還原到指向一個新的commit,該commit的內容與上一次merge後的那個commit一樣,包含merge的內容
④最後再次將release分支與master分支進行合併,此時可以保證release分支所有的內容,都是合併到master分支的
12.查找誰在那次commit引入了bug
①git bisect start:開始二分查找
②git bisect bad:標註當前這個commit是有bug的
③git biset good v1.0.0:用tag來標註說從上一次哪個上線爲止,是沒有bug的,就是那個tag對應的commit之前都是好的
④git bisect reset:從二分查找狀態中恢復到之前的狀態
13.刪除遠程標籤
①git tag -d v1.0 #刪除本地標籤v1.0
②git push origin:refs/tags/v1.0 #刪除遠程標籤v1.0
14.將一個項目發到gitlab上
①git init
②git remote add origin https://git.lug.ustc.edu.cn/LiAnChen/mylims.git
③git add .
④git commit -m "Initial commit"
⑤git push -u origin master