基本命令
git clean -f
刪除未被跟蹤的文件
git clean -df
刪除未被跟蹤的文件和文件夾
差異對比
git log -p
命令來顯示每一次提交與其父節點提交內容之間快照的差異
git log -p ./src/filepath/a.c
命令來顯示指定文件每一次提交與其父節點提交內容之間快照的差異
git diff
查看工作目錄中某個還未載入(stage)的文件的差異
git diff --stage
查看載入(staged)而並未提交(not committed)的內容差異
git diff HEAD
查看最後一次提交之後工作目錄中文件的變更
git diff v1.6.0 -- README
查看創建v1.6這個標籤之後README文件所發生的修改
git diff v1.0 v1.1
兩個版本之間比對
git diff --stat v1.6.1.1 v1.6.1.2
顯示所有文件統計差異
git diff --stat v1.6.1.1 v1.6.1.2 ./src/filepath/a.c
顯示指定文件統計差異
git diff v1.6.1.1 v1.6.1.2
顯示所有文件詳細差異
git diff v1.6.1.1 v1.6.1.2 ./src/filepath/a.c
顯示指定文件詳細差異
查看變更歷史
git log
查看所有文件變更歷史
git log ./src/filepath/a.c
查看對指定文件的變更歷史
還原代碼
git revert HEAD
撤銷前一次 commit
git revert HEAD^
撤銷前前一次 commit
git revert commit_id
撤銷指定的版本,撤銷也會作爲一次提交進行保存
git push origin master
將還原更改提交到遠程分支上
git revert是提交一個新的版本,將需要revert的版本的內容再反向修改回去,
版本會遞增,不影響之前提交的內容
遠程分支
遠程分支查看
git remote -v
查看遠程分支
添加遠程分支
git remote add origin https://gitee.com/lvxinliang/CPPTest.git
推送本地分支到遠程分支並設置分支上游
git push -u origin master
初次提交本地分支,將本地的master分支推送到origin主機,同時設置 master 的 git pull/status 的上游,後面就可以不加任何參數使用git push
git push --set-upstream origin master
效果同上,上面是縮寫
推送本地分支到遠程分支
git push origin master
將本地分支推送到遠程的同名分支上
拉取遠程分支並創建本地分支
git checkout -b dev origin/dev
在本地新建dev,並自動切換到該本地分支且設置分支上游
Tag操作
創建Tag
git tag v1.0
當前分支創建一個名爲v1.0的tag
列出所有Tag
git tag
刪除Tag
git tag -d v0.1
推送本地Tag到遠程
git push origin v1.0
一次性推送全部尚未推送到遠程的本地標籤
git push origin --tags
刪除遠程Tag
git tag -d v0.9
要刪除遠程標籤就麻煩一點,先從本地刪除
git push origin :refs/tags/v0.9
然後,從遠程刪除。刪除命令也是push
代碼合併
合併單個commit
git cherry-pick 6bbf6b4 #6bbf6b4爲dev01上的commitId
將dev01上功能A對應代碼cherry-pick到dev02上
常用配置
[alias]
co = checkout
ci = commit
br = branch
st = status
last = log -1
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
d = difftool
[diff]
tool = vimdiff
[difftool]
prompt = false
[user]
email = user@163.com
name = user
[color]
ui = auto
[push]
default = simple
差別
git revert 和 git reset的區別
- git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit。
- 在回滾這一操作上看,效果差不多。但是在日後繼續merge以前的老版本時有區別。因爲git revert是用一次逆向的commit“中和”之前的提交,因此日後合併老的branch時,導致這部分改變不會再次出現,但是git reset是之間把某些commit在某個branch上刪除,因而和老的branch再次merge時,這些被回滾的commit應該還會被引入。
- git reset 是把HEAD向後移動了一下,而git revert是HEAD繼續前進,只是新的commit的內容和要revert的內容正好相反,能夠抵消要被revert的內容。