Git 常用命令

Git常用命令


一、倉庫管理

1. 初始化

初始化後,目錄下會生成.git隱藏文件夾,圖標顯示git可控,.git目錄下有一個hooks,裏面可以對預提交信息做一些規範和限制。

git init

2. 添加/修改倉庫地址

a.) 添加關聯地址:

$ git remote add origin http://dev.github.com:9800/root/front.git

b.) 修改關聯地址:

git remote set-url origin http://dev.github.com:9800/root/front.git

c.) 切換http(s)/ssh方式:

$ git remote rm origin
$ git remote add origin "git遠程地址"
$ git push origin

3. 查看當前倉庫地址

git remote -v

4. 創建本地倉庫

$ git clone http://dev.github.com:9800/root/front.git

會在當前目錄下自動生成front的倉庫目錄,如果自定義文件夾名,後面空格後加上名稱

二、分支管理

1. 查看分支

$ git br    // 查看本地

$ git br -r // 查看遠端

$ git br -a // 查看所有

2. 查看分支狀態(推薦)

可全面查看本地分支狀態,遠端對應關係,落後/優先多少,最後一次提交信息及hash值

$ git br -vv

3. 創建分支

a.) 創建本地分支:

本地分支名可不與遠程一致,簡單一點,方便Tab鍵補全,只要.gitconfig裏的[push]項設置default = upstream即可,不然提交時,會提示本地與遠程不一致

$ git br <branch> <origin-branch> // 創建分支,並關聯遠端
或:
$ git co -b <branch> <origin-branch> // 創建分支並立即切換過去

b.) 創建遠程分支:(本地分支推送到遠端)

git push origin -u <branch>:<origin-branch> // -u:創建遠程分支並關聯,origin-branch不用帶origin/路徑

4. 切換分支

$ git co <branch>

5. 合併分支

a.) 合併本地分支:

$ git merge <branch> --no-ff // --no-ff:關閉Fast-Foward合併,這樣可以生成merge提交,保留分支合併信息

b.) 合併遠端本地:

$ git merge <origin-branch> --no-ff // 推薦這樣使用,因爲從遠端merge能保證永遠是最新的

c.) 取消合併:

$ git merge --abort

6. 修改分支

a.) 修改分支名稱:

$ git br -m <branchName>

b.) 修改當前分支遠端關聯:

$ git br --set-upstream-to <origin-branch>

c.) 修改指定分支遠端關聯:

$ git br --set-upstream <branch> <origin-branch>

7. 刪除分支

a.) 刪除本地分支:

$ git br -d <branch>

b.) 強制刪除本地分支:

$ git br -D <branch> // 未被合併的分支被刪除的時候需要強制

c.) 刪除遠端分支:

$ git push origin --delete <branch>
或:
$ git push origin :<branch>  // 推送一個空分支到遠端,即刪除

8. 更新分支

從遠端拉取最新的分支信息,更新本地緩存

$ git fetch -p // 更新被刪除的分支

三、查看管理

1. 查看當前狀態

$ git st // 查看當前工作狀態

2. 查看提交記錄

a.) 查看全部提交記錄:

git lg

b.) 查看單個文件所有記錄:

$ git lg <fileName>

c.) 查看單個文件修改詳情:

$ git lg -p <fileName> // 可查看比較文件歷史修改記錄

d.) 查看單條記錄詳情:

$ git show <commit-id> // 日誌的hash

e.) 查找所有包括指定字符串文件:

$ git grep -n <string// -n:顯示字符串所在的行數

3. 查看比較文件

a.) 查看比較文件:(與暫存區比較)

如果當前文件沒被修改,需要查看歷史修改情況,用上面的git lg -p fileName

$ git diff <fileName> // 比較當前文件和暫存區文件差異,應用在提交前確認的場景

b.) 比較兩次提交記錄:

$ git diff <commit-id1> <commit-id2> // 比較兩次提交之間的差異

4. 查看歷史操作記錄

每一次當前HEAD發生改變(包括切換branch, pull, 添加新commit)一個新的紀錄就會被添加到reflog

git reflog

四、操作管理

1. 更新

a.) 非快進更新:

$ git pull --no-ff

b.) 基於rebase:

這個命令會迫使git將遠程分支上的變更同步到本地,然後將尚未推送的提交重新應用到這個最新版本,就好象它們剛剛發生一樣,這樣就可以避免合併以及隨之而來的醜陋的合併信息

$ git pull --rebase // 避免產生無用的合併信息

例:當前狀態爲 master c7bcf10 [origin/master: ahead 1, behind 1] [cps-bk] add a.js
此時用--rebase只產生1 commit,而普通的git pull會產生2 commits,其中一條是沒必要的合併信息。

若--rebase衝突了,解決方案:

$ git add -A   // 強制添加到
$ git rebase --continue
$ git push

c.) 臨時更新:(暫存)

$ git stash      // 先放入暫存區
$ git pull
$ git stash pop  // 恢復顯示工作內容,或用git stash apply stash@{n}挑選恢復哪個

d.) 管理暫存:

$ git stash list    // 顯示暫存列表
$ git stash clear   // 清除暫存列表

2. 提交

a.) 多個修改,只提交部分:

$ git add <file1> <file2>   // 只添加要提交的到本地暫存區
$ git ci -m 'commit info'   // -m處不加a
$ git push

b.) 提交全部:

$ git add .               // 有新文件時,一定要
$ git ci -am 'commit info'
$ git push

c.) 追加提交:(未push到遠端) 
將最近一次的變更追加到最新的提交,同時也可以編輯提交信息,不產生新的提交記錄。

$ git ci --amend   // 如果已push到遠端,不建議追加,容易跟自己衝突
$ git push

d.) 提交時繞過pre-commit驗證:

git ci -am 'commit info' --no-verify

3. 提取

從別的分支同步一個commit到本分支

$ git cherry-pick <commit-id>

五、恢復管理

1. 恢復本地

a.) 已修改,未暫存:

$ git co <fileName|directory> // 恢復單個文件或目錄
$ git co . // 恢復全部

b.) 已暫存,未提交:

$ git reset HEAD^   // 向前回滾一條記錄,相當於HEAD~1
$ git co .

c.) 恢復前N條:

$ git reset HEAD~n // 默認省略--soft參數,屬於軟恢復,n>=1整數

d.) 硬恢復:

$ git reset --hard HEAD~n|<commit-id> // 不保留當前修改,要當心,確認當前修改沒有用了

2. 恢復遠端

a.) 單次回滾: 
git revert 會產生一個新的與之前commit相反的操作,來抵消之前錯誤的提交

$ git revert <commit-id>   // 也可以多次操作,達到恢復多個的目的
$ git push

b.) 指定位置:

$ git reset --hard <commit-id>   // 恢復到當前位置
$ git push -f      // 要加-f強制推送

c.) 挑選模式:

$ git rebase -i <commit-id>  // 會打開編輯,剔除挑選記錄
$ git push -f      // 要加-f強制推送

六、其它命令

1. 臨時忽略文件

a.) 忽略跟蹤:
.gitignore只能忽略那些原來沒有被跟蹤的文件,如果文件已被納入版本管理中,則修改.gitignore是無效的。

$ git update-index --assume-unchanged <file>

b.) 恢復跟蹤:

$ git update-index --no-assume-unchanged <file>

c.) 查看被忽略的跟蹤:

$ git ls-files -v|grep '^h'

d.) 另一個類似的功能:

$ git update-index --skip-worktree <file>  // 忽略

$ git update-index --no-skip-worktree <file>  // 恢復

2. 清理

a.) 移除版本控制:

$ git rm <file> --cached // -r:移除目錄, --cached:保留本地的文件

b.) 清理工作樹:

$ git clean -fd // 移除未跟蹤的文件和目錄,如果加上-n參數來先看看會刪掉哪些文件

c.) 垃圾回收:

Git 往磁盤保存對象時默認使用的格式叫鬆散對象(loose object)格式,當手動執行git gc 命令,或推送至遠程服務器時,Git會將這些對象打包至一個叫packfile的二進制文件以節省空間並提高效率。

$ git gc --auto
$ git repack -d -l  

3. 幫助

$ git help

或查看某一條指令參數:

git <command> -n
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章