目錄
1. 配置
1)查看配置信息
$ git config --list
git config <key> //查看某一項配置
2)查看user
$ git config user.name
3)首次配置用戶信息
$ git config --global user.name "username"
$ git config --global user.email your_email
2. 刪除文件
$ git rm fileName //刪除已跟蹤文件,並且連帶從工作目錄中刪除指定文件
$ git rm --cached fileName //只刪除已跟蹤文件,不會從磁盤中刪除
3. 提交歷史記錄
$ git log
-p | 按補丁格式顯示每個跟新之間的差異 |
--stat | 顯示每次更新的文件修改統計信息 |
--shortstat | 只顯示--stat中最後的行數修改添加移除統計 |
--name-only | 僅在提交信息後顯示已修改的文件清單 |
--name-status | 顯示新增、修改、刪除的文件清單 |
--abbrev-commit | 僅顯示SHA-1的前幾個字符,而非所有的40個字符 |
--relative-date | 使用較短的相對時間顯示(比如,"2 weeks ago") |
--graph | 顯示ASCII圖形表示的分支合併歷史 |
--decorate | 顯示每個commit的引用(如:分支、tag等) |
--oneline | 每個提交記錄只以一行的形式顯示 |
常用組合:
$ git log --oneline
$ git log --oneline --graph
$ git log --oneline --graph --all //以單行簡圖的形式顯示所有的分支
$ git log -n //只顯示最近的n次提交
$ git log --author authorName //只顯示指定作者相關的提交
3. 撤銷操作
$ git commit --amend
例如:
$ git commit -m "new commit"
$ git add newFile
$ git commit --amend
最終只會有一個提交--第二次提交將代替第一次提交的結果
4. 遠程
1)查看遠程倉庫
$ git remote
$ git remote -v //顯示需要讀寫遠程倉庫使用的git保存的簡寫與其對應的URL
2)添加遠程查庫
$ git remote add <shortname> <url>
例:
$ git remote add origin https://github.com/hello/Hello.git
3)刪除遠程倉庫
$ git remote rm remoteName
5. fetch 和 pull
$ git fetch [remote-name]
訪問遠程倉庫,從中拉取所有你還沒有的數據。執行完之後將擁有遠程倉庫中所有分支的引用,可以隨時合併或查看。
需要注意的是,git fetch 命令會將數據拉取到你的本地倉庫--它並不會自動合併或修改你當前的工作,當準備好是你必須手動將其合併入你的工作
例:
$ git fetch origin
從遠程fetch後可通過如下命令將拉去的分支添加到當前的分支中:
$ git merge origin/master
其中 origin/master 爲fetch下來的分支名稱
也可以建立一個分支來指向該遠程分支, 如:
$ git checkout -b remote_branch origin/master
fetch的另一個用法:
$ git fetch origin master:newbranch
該命令會在本地新建一個newbranch分支並將遠程origin倉庫的master分支代碼下載到本地newbranch分支
pull: 該命令很少用
$ git pull <遠程主機名> <遠程分支名>
$ git pull origin master
6. 推送到遠程倉庫
$ git push [remote-name] [branch-name]
$ git push origin master
只有當你有克隆服務器的寫入權限,並且之前沒有人推送過時,這條命令才能生效。當你和其他人在同一時間克隆,他們先推送到上游然後你在推送到上游,你的推送就會毫無疑問地被拒絕。你必須先將他們的工作拉取下來並將其合併到你的工作後才能推送。
7. 遠程倉庫的移除與重命名
移除:
$ git remote rm remoteName
重命名
$ git remote rename oldName newName
修改地址:
$ git remote origin set-url [new url]
或者先刪後加
$ git remote rm origin
$ git remote add origin [url]
8. 分支
1)創建分支
$ git branch branch_name //創建一個名爲branch_name的分支
注:該命令僅創建一個分支,並不會自動切換到新分支中去
2)切換分支
$ git checkout branch_name //切換到branch_name分支
3)創建分支的同時切換到新創建的分支
$ git branch -b new_branch_name
它是下面兩條命令的簡寫
$ git branch new_branch_name
$ git checkout new_branch_name
4) 刪除分支
$ git branch -d branch_name
5)分支的合併
例:將名爲test的分支合併到master分支中
$ git checkout master
$ git merge test
6)合併兩個沒有關係的分支
$ git merge branch_name --allow-unrelated-histories
7)遇到衝突的分支合併
如果在兩個不同的分支中,對同一個文件部分進行了不同的修改,Git就沒法乾淨的合併它們。如上面的分支的合併的例子中,如果master分支和test分支都同時對README.md文件進行了修改,那麼執行一下命令後
$ git merge test
此時Git已經做了合併操作,但是沒有自動地創建一個新的合併提交。Git會停下來,等待你去解決合併產生的衝突。此時你可以在合併衝突後的任意時刻使用git status命令來查看那些因包含合併衝突而處於未合併(unmerged) 狀態的文件.
當自己手動解決玩所有文件裏的衝突之後,對每個文件使用git add命令將其標記爲衝入已解決。一旦暫存這些原本有衝突的文件,Git就會將他們標記爲衝突已解決。之後可以使用git commit命令提交完成分支的合併。
8)其他操作
$ git branch -v //查看每一個分支的最後一次提交
$ git branch -vv //查看所有的本地分支,並顯示更多的信息(是否跟蹤遠程分支)
$ git branch --merged //查看已經合併到當前分支的分支
$ git branch --no-merged //查看沒有合併到當前分支的分支
9. 變基 rebase
使用方式一:
$ git checkout experiment
$ git rebase master //將experiment變基到master分支
$ git checkout master
$ git merge experiment //合併分支
使用方式二:
$ git rebase [basebranch] [topicbranch] //將topicbranch變基到basebranch
如上例子:
$ git rebase master experiment //這樣做就不必先checkout到experiment
$ git checkout mater
$ git merge experiment
一般變基的目的是爲了確保在向遠程分支推送時能保持歷史的整潔。在這種情況下,你首先在自己的分支裏進行開發,當開發完成時,你需要將你的代碼變基到 origin/master上,然後再向主項目提交修改。這樣的話,該項目的維護者就不再需要進行整合工作,只需要更快合併即可。