版本庫中的檔案
-
code
-
圖片
-
視訊
-
word
-
so on
git
能檢測程式碼的差異性,但是對於圖片,視訊和word這些二進位制的檔案,git
只能跟蹤其大小變化.所以對於文字版本的控制,最好使用markdown以文字的形式
進行儲存.
因為文字是有編碼的,比如中文有常用的GBK編碼,日文有Shift_JIS編碼,如果沒有歷史遺留問題,強烈建議使用標準的UTF-8編碼,所有語言使用同一種編碼,既沒有衝突,又被所有平臺所支援。
新增
Unix的哲學是“沒有訊息就是好訊息”
-
git commit -m `blabla`
-
git commit -am `blabla`
這兩者淺顯的區別是:-am
表示沒有新增加檔案,只是對原來的檔案做了修改,所以執行此命令沒問題.
如果新建了檔案,就按正常步驟:
$ git add .
$ git commit -m `blabla`
檢視歷史提交記錄
-
git log
-
git log –pretty=oneline
回退版本
$ git reset --hard HEAD
有時,我們會有把當前版本在本地弄亂的情況,執行上面命令即可回到最後一次提交的版本上去.
那麼上一個版本就是HEAD^
,上上一個版本就是HEAD^^
,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100
回到未來
$ git reflog
$ git co d62cd5c
➜ gittest git:(d62cd5c) git br
* (detached from d62cd5c)
master
➜ gittest git:(d62cd5c) git co master
Warning: you are leaving 1 commit behind, not connected to
any of your branches:
d62cd5c update
If you want to keep them by creating a new branch, this may be a good time
to do so with:
git branch new_branch_name d62cd5c
Switched to branch `master`
➜ gittest git:(master) git br testbr d62cd5c
➜ gittest git:(master) git br
* master
testbr
➜ gittest git:(master) git merge testbr
Updating d28643d..d62cd5c
Fast-forward
readme.md | 2 ++
1 file changed, 2 insertions(+)
檢視區別
用git diff HEAD -- readme.txt
命令可以檢視工作區和版本庫裡面最新版本的區別
撤銷修改
git checkout -- file
可以丟棄工作區的修改
命令git checkout — readme.txt意思就是,把readme.txt檔案在工作區的修改全部撤銷,這裡有兩種情況:
-
一種是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
-
一種是readme.txt已經新增到暫存區後,又作了修改,現在,撤銷修改就回到新增到暫存區後的狀態。
總之,就是讓這個檔案回到最近一次git commit
或git add
時的狀態。
git checkout -- file
命令中的--
很重要,沒有--
,就變成了“切換到另一個分支”的命令.
刪除檔案
現在你有兩個選擇,一是確實要從版本庫中刪除該檔案,那就用命令git rm
刪掉,並且git commit
:
$ git rm test.txt
rm `test.txt`
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
1 .使用rm
直接刪除,然後恢復
➜ gittest git:(master) ls
new.md readme.md
➜ gittest git:(master) rm new.md
➜ gittest git:(master) ✗ ls
readme.md
➜ gittest git:(master) ✗ git co -- new.md
➜ gittest git:(master) ls
new.md readme.md
2 .使用git rm
,工作區被刪除的檔案也會消失
➜ gittest git:(master) ls
new.md readme.md
➜ gittest git:(master) git rm new.md
rm `new.md`
➜ gittest git:(master) ✗ ls
readme.md
➜ gittest git:(master) ✗ git st
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: new.md
但git
會儲存一個版本記錄,只要是commit
過的,都可以放心刪除
,刪除後做個提交記錄就好.
分支
檢視分支:git branch
建立分支:git branch <name>
切換分支:git checkout <name>
建立+切換分支:git checkout -b <name>
合併某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>
,強制刪除git branch -D <name>
刪除遠端分支:
As of Git v1.7.0, you can delete a remote branch using
git push origin --delete <branchName>
which is easier to remember than
git push origin :<branchName>
多人協作
當你的小夥伴從遠端庫clone時,預設情況下,你的小夥伴只能看到本地的master分支。
現在,你的小夥伴要在dev分支上開發,就必須建立遠端origin的dev分支到本地,於是他用這個命令建立本地dev分支:
$ git checkout -b dev origin/dev
先用git pull
把最新的提交從origin/dev抓下來,然後,在本地合併,解決衝突,再推送
多人協作的工作模式通常是這樣:
首先,可以試圖用git push origin branch-name推送自己的修改;
如果推送失敗,則因為遠端分支比你的本地更新,需要先用git pull試圖合併;
如果合併有衝突,則解決衝突,並在本地提交;
沒有衝突或者解決掉衝突後,再用
git push origin branch-name
推送就能成功!如果git pull提示“no tracking information”,則說明本地分支和遠端分支的連結關係沒有建立,
用命令git branch --set-upstream branch-name origin/branch-name
。
建立標籤
切換到master,執行
$ git tag v1.0
可以用命令git tag
檢視所有標籤:
➜ gittest git:(master) ✗ git tag
v0.9
v1.0
預設標籤是打在最新提交的commit上的。有時候,如果忘了打標籤,
方法是找到歷史提交的commit id,然後打上就可以了:
$ git log --pretty=oneline --abbrev-commit
0f14186 add new.md
d62cd5c update
d28643d first
(END)
$ git tag v0.9 0f14186
--abbrev-commit
這個引數代表: “show only partial prefixes of commit object names”
還可以建立帶有說明的標籤,用-a指定標籤名,-m指定說明文字:
$ git tag -a v0.1 -m "version 0.1 released" 3628164
小結
命令git push origin <tagname>可以推送一個本地標籤;
命令git push origin –tags可以推送全部未推送過的本地標籤;
命令git tag -d <tagname>可以刪除一個本地標籤;
命令git push origin :refs/tags/<tagname>可以刪除一個遠端標籤。
修改未push得”-m”(message)資訊。
git commit --amend
管理未被gitignore的檔案
git commit --cached _yourfile_
如何貢獻
-
Fork it
-
Clone it
-
Create your feature branch (git checkout -b my-new-feature)
-
Commit your changes (git commit -am `Add some feature`)
-
Push to the branch (git push origin my-new-feature)
-
Create new Pull Request