1\. 全局操作
git --version?//git 機器上是否存在
git init --bare project.git?//服務端:初始化一個新的倉庫
chown -R zhangsan:zhangsan project.git/?//修改倉庫的權限
2\. 添加、提交修改、對比、重命名
添加/提交:
git add??//添加單個文件
git add --all?//添加所有,適合項目初始化或批量提交的時候
git add .?//進入某個文件夾根目錄,表示添加此目錄下面所有變更的文件
git commit -m "操作說明"?//提交
對比:
git diff HEAD^ --?[readme.md](http://readme.md/)?//[readme.md](http://readme.md/)文件與上一個版本比較差異
重命名:
git mv a.php b.php?//重命名
git status -s?//文件關聯狀態
git commit -a -m "a.php文件修改為b.php"?//-a修改的全部提交
git push origin master?//推到遠程
3\. 日志查看
git log //查看所有日志
git log -2 //查看最近提交的2行
git log --pretty=oneline //以行的形式顯示
git log --pretty=oneline --abbrev-commit //行短標識的顯示形式
git log --graph --pretty=oneline --abbrev-commit //查看分支合并圖,并以行短標識的顯示形式
3\. 查看歷史命令
git reflog
4\. 回滾版本
git reset --hard?commit\_id
git reset --hard e9a838d?#返回到某個節點,不保留修改。
git reset --soft e9a838d?#返回到某個節點。保留修改?
回滾到上N個版本的快捷方式:
git reset --hard?HEAD^?//上1個版本
git reset --hard?HEAD^^?//上2個版本
git reset --hard?HEAD^^^?//上3個版本
當然如果要回退到上100個版本不可能100個^,可以:
git reset --hard?HEAD~100
5.撤銷修改,恢復刪除,獲取指定commit\_id信息
工作區:
git checkout --?
git checkout --?[readme.md](http://readme.md/)
git checkout -- . //恢復在當前目錄下的所有修改
暫存區:
第1步:git reset --hard?
第2步:按工作區的處理方式處理
已經提交版本庫:
第1步:git reset --hard?commit\_id
第2步:按回退的流程處理
推送到遠程庫:
恭喜你,無藥可救
獲取指定commit\_id文件信息:
git checkout?commit\_id?
git checkout e9a838d?[readme.md](http://readme.md/)
與git clean 混合使用:
git checkout -- . && git clean -xdf
6-1:清除
git clean -df?#返回到某個節點
git clean 參數?-n?顯示 將要 刪除的 文件 和 目錄?-f?刪除 文件?-df?刪除 文件 和 目錄
6-2.刪除文件
git rm?
git commit -m "操作說明"
7.分支操作
查看分支:git branch
創建分支:git branch?
分支推送到遠程:git push origin?
切換分支:git checkout?
創建+切換分支:git checkout -b?
合并某分支到當前分支:git merge?
刪除分支:git branch -d?
強制刪除一個沒有合并過的分支:git branch -D? tips:慎用
刪除遠程分支:git push origin --delete?
7-1.重命名遠程分支
在git中重命名遠程分支,其實就是先刪除遠程分支,然后重命名本地分支,再重新提交一個遠程分支。
查看遠程分支:git branch -av
刪除遠程分支:git push origin --delete?
重命名本地分支:git branch -m??
推送本地分支:git push origin?
8.分支合并保留合并記錄
git merge --no-ff -m "merge with on-ff" dev
tips:合并分支時,加上--no-ff參數就可以用普通模式合并,合并后的歷史有分支,能看出來曾經做過合并;而fast forward合并就看不出來曾經做過合并,默認不加--no-ff是按fast forward的合并方式。
9.分支臨時存儲
保存:
git stash?//備份當前的工作區的內容,從最近的一次提交中讀取相關內容,讓工作區保證和上次提交的內容一致。同時,將當前的工作區內容保存到Git棧中。不帶備注。
git stash save "臨時修改1001bug,暫存"?//帶備注
git stash -a save "臨時修改1001bug,暫存"?// -a選項會把項目里面新加入的代碼文件同時放到暫存區
查看:
git stash list?//顯示Git棧內的所有備份,可以利用這個列表來決定從那個地方恢復
恢復:
git stash apply \[--index\]\[\]?//恢復后,stash內容并不刪除,你需要用git stash drop來刪除
git stash pop \[--index\]\[\]?//恢復最新(指定stash)并刪除stash
刪除:
git stash drop \[\]?//刪除某一個進度,默認刪除最新進度
創建分支
git stash branch ??//基于暫存區創建分支
清空:
git stash clear?//清空Git棧。此時使用gitg等圖形化工具會發現,原來stash的哪些節點都消失了。
參數解釋:
\--index?參數:不僅恢復工作區,還恢復暫存區??指定恢復某一個具體進度。如果沒有這個參數,默認恢復最新進度
以下命令恢復編號為0的進度的工作區和暫存區
git stash pop -- index statsh@{0}
10.標簽(tag)管理
列出所有tag:
git tag
詳情查看:
git show??//查看指定tag包信息
git show v1.0
創建:
git tag??//新建一個標簽,默認為HEAD
git tag v1.0
git tag??commit\_id?//指定一個commit id
git tag v1.0 b1b76f
git tag -a??-m "描述tag的說明"?//帶有備注tag的信息
git tag -a v1.0 -m "供應鏈1.0開發完成,上線" b1b76f
git tag -s??-m "描述tag的說明"?//用私鑰簽名一個標簽,PGP簽名標簽
git tag -s??-m "供應鏈1.0開發完成,上線" b1b76f
刪除:
未推送到遠程:
git tag -d??//刪除指定tag包
git tag -d v1.0
已推送到遠程:
第1步:git tag -d v1.0 //刪除本地
第2步:git push origin?:refs/tags/v1.0?//刪除遠程tag
推送:
git push ??//推送指定tag
git push origin v1.0
git push --tags?//一次性推送全部尚未推送到遠程的本地標簽
git push origin --tags
參數解釋:
origin:遠程主機名
11.忽略特殊不用提交的文件
第1步:編寫.gitignore文件
第2步:把你需要過濾的文件直接寫在.gitignore文件中。
tips: .gitignore要通過版本庫管理起來。官方已經提供了很多文件范例參考[https://github.com/github/gitignore](https://github.com/github/gitignore),可以把你需要的直接copy進.gitignore文件中。
12.配置別名
方便管理和使用命令,如git st就表示git status這是不是很爽
git config --global?[alias.co](http://alias.co/)?checkout
git config --global?[alias.ci](http://alias.ci/)?commit
git config --global?[alias.br](http://alias.br/)?branch
git config --global alias.unstage 'reset HEAD' //撤銷修改
git config --global alias.last 'log -l' //顯示最后1次提交
配置文件存放目錄:
cat .git/config
刪除別名:
直接刪除配置文件.git/config alias節點,指定別名的那一行,保存就行
tips:當前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中.
13.git服務器管理
管理公鑰,用[Gitosis](https://github.com/sitaramc/gitolite)
控制權限,用[Gitolite](https://github.com/sitaramc/gitolite)
14\. 刪除不存在對應遠程分支的本地分支
查看遠程分支狀態:git remote show origin
本地版本庫中去除遠程刪除的分支:git remote prune origin
15\. 打包指定commit修改的代碼
git archive -o update.zip 待導出的ID(a3a12c4) $(git diff --name-only 待導出的上一個提交ID(3ba0909))
例:git archive -o update.zip?a3a12c4?$(git diff --name-only?3ba0909)
Tips: 這個其實就是比較版本之前差異,然后導出不一樣的。