1.git的安裝
sudo apt-get install git
2.自報家門
git config --global user.name "yuzhiwei"
git config --global user.email "[email protected]"
3.建立版本庫,也就是倉庫
建立空目錄:
mkdir mygit
cd mygit
初始化,把目錄變成git可以管理的倉庫:
git init
把檔案添加到版本庫:
vi readme.txt 在mygit下放入一個檔案,例如readme.txt
git add readme.txt 把檔案添加到倉庫
git commit -m "wrote a readme file" 把檔案送出到倉庫,-m "說明文"
4.檢視
檢視倉庫目前狀态:
git status
檢視具體修改詳情:
git diff readme.txt
把檔案送出到倉庫:
git add readme.txt
git commit -m "add haha"
5.版本回退
git log
如果想減少看到的東西,隻看到——檔案的版本+寫的說明文:
git log --pretty=oneline
在git中,head表示目前版本,head^表示上一個版本,head^^表示上上個版本,head~100往上100個版本:
git reset --hard head^
想要回到後面的版本中,隻要上面的指令視窗沒關:
git reset --hard 版本号的部分或全部
檢視輸入指令曆史記錄:
git reflog
6.工作區和暫存區
mygit目錄就是一個工作區。.git隐藏目錄是版本庫,其中stage或index暫存區。
git為我們建立的第一個分支master,指向master的指針head。
git add把檔案添加到暫存區,git commit把暫存區對應檔案添加到目前分支。
git diff head -- readme.txt可以檢視工作區和版本庫裡面最新版本的差別。
7.撤銷修改
git checkout -- file可以撤銷最近一個git commit 或git add時的狀态。
一種是file自修改後還沒有被放到暫存區,一種是已經添加到暫存區,并又在工作區修改了。
git reset head file可以把暫存區的修改撤銷掉,重新放回工作區。
8.删除檔案
删除工作區檔案後:
可以删除版本庫中的檔案:git rm readme.txt 然後 git commit -m "remove readme.txt"
可以撤銷誤删,恢複檔案:git checkout -- readme.txt
9.遠端倉庫
注冊github賬戶,然後如果root目錄下沒有.ssh目錄,目錄裡沒有id_rsa檔案、id_rsa.pub檔案,就:
ssh-keygen -t rsa -c "[email protected]"
登陸github,在settings裡ssh keys頁面,點“add ssh key”,填任意title,指派id_rsa.pub内容到key文本框。
10.添加遠端庫
create a new repo,然後# git remote add origin [email protected]:zhiweiyu/mygithub.git
# git push -u origin master
以後每次送出東西到分支後,就輸入# git push origin master
11.從遠端克隆
# git clone [email protected]:zhiweiyu/yuzhiwei.git
12.分支管理
檢視分支:git branch
建立分支:git branch <name>
切換分支:git checkout <name>
建立+切換分支:git checkout -b <name>
合并某分支到目前分支:git merge <name>
删除分支:git branch -d <name>
13.解決沖突
如果兩個分支都對同一個檔案修改過了,那麼合并就可能出問題。
可以直接檢視本分支的檔案内容,發現沖突的内容。對其修改,然後送出commit,最後合并。
用git log檢視分支合并情況:# git log --graph --pretty=oneline --abbrev-commit
14.分支管理政策
--no-ff方式的git merge:
# git merge --no-ff -m "ok" dev
15.bug分支
# git stash将目前工作現場“儲藏”起來。
# git stash list檢視剛才的工作現場
最後,恢複現場:git stash apply stash@{0} ,恢複後stash内容不删除。需要用git stash drop來删除
git stash pop來删除,恢複同時把stash内容也删除了。
16.合并之前删除分支
強制删除:git branch -d dev
17.多人協作
檢視遠端庫的資訊:
# git remote
# git remote -v
推送分支:git push origin dev 其中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。
這就是多人協作的工作模式,一旦熟悉了,就非常簡單。
18.建立标簽
# git tag v1.0
# git tag
預設标簽是打在最新送出的commit上的。有時候,如果忘了打标簽,比如,現在已經是周五了,但應該在周一打的标簽沒有打,怎麼辦?
方法是找到曆史送出的commit id,然後打上就可以了:
# git log --pretty=oneline --abbrev-commit
root@ubuntu:/home/yu/desktop/mygit/yuzhiwei# git tag v1.1 85a74d9
root@ubuntu:/home/yu/desktop/mygit/yuzhiwei# git tag
v1.0
v1.1
root@ubuntu:/home/yu/desktop/mygit/yuzhiwei#
檢視标簽資訊# git show v1.1
還可以建立帶說明的标簽:# git tag -a v1.2 -m "version 1.2 released" 85a74d922aaa
19.操作标簽
推送标簽:
# git push origin v1.3
# git push origin --tags
如果标簽已經推送到遠端,要删除遠端标簽就麻煩一點,先從本地删除:
# git tag -d v1.3
然後,從遠端删除。删除指令也是push,但是格式如下:
# git push origin :refs/tags/v1.3
20.使用github
如何參與一個開源項目呢?比如人氣極高的bootstrap項目,這是一個非常強大的css架構,你可以通路它的項目首頁https://github.com/twbs/bootstrap,點“fork”就在自己的賬号下克隆了一個bootstrap倉庫,然後,從自己的賬号下clone:
i# git clone [email protected]:zhiweiyu/bootstrap.git
是git顯示顔色:# git config --global color.ui true
21.忽略特殊檔案
在git工作區的根目錄下建立一個特殊的.gitignore檔案,如:
忽略windows自動産生的檔案,忽略python編譯産生的.pyc、.pyo、dist等檔案或目錄,加上自定義檔案,
.gitignore檔案内容如下:
# windows:
thumbs.db
ehthumbs.db
desktop.ini
# python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
# my configurations:
db.ini
deploy_key_rsa
執行個體:
# vi .gitignore
# git add .gitignore
# git commit -m "ignore"
# git push origin master
22.配置别名
status的别名是st : # git config --global alias.st status
顯示最後一次送出資訊:# git log -1 這裡是yi,不是小寫的l
檢視的比較詳細的合并資訊等:
# git log --color --graph --pretty=format:'%cred%h%creset -%c(yellow)%d%creset %s %cgreen(%cr) %c(bold blue)<%an>%creset' --abbrev-commit
每個倉庫的git配置檔案都放在.git/config檔案中
使用cat .git/config檢視,别名就在[alias]後面,要删除别名,直接把對應的行删掉即可。
而目前使用者的git配置檔案放在使用者主目錄下的一個隐藏檔案.gitconfig中:
配置别名也可以直接修改這個檔案,如果改錯了,可以删掉檔案重新通過指令配置。
23.搭建git伺服器
(1)sudo apt-get install git
(2)sudo adduser git
(3)收集所有需要登入的使用者的公鑰,就是他們自己的id_rsa.pub檔案,把所有公鑰導入到/home/git/.ssh/authorized_keys檔案裡,一行一個。
(4)先標明一個目錄作為git倉庫,假定是/srv/sample.git,在/srv目錄下輸入指令:sudo git init --bare sample.git
(5)git就會建立一個裸倉庫,裸倉庫沒有工作區,因為伺服器上的git倉庫純粹是為了共享,是以不讓使用者直接登入到伺服器上去改工作區,并且伺服器上的git倉庫通常都以.git結尾。然後,把owner改為git:
sudo chown -r git:git sample.git
(6)第五步,禁用shell登入:
出于安全考慮,第二步建立的git使用者不允許登入shell,這可以通過編輯/etc/passwd檔案完成。
git:x:1001:1001:,,,:/home/git:/bin/bash
改為:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
第六步,克隆遠端倉庫:
現在,可以通過git clone指令克隆遠端倉庫了,在各自的電腦上運作:
#git clone git@server:/srv/sample.git
剩下的推送就簡單了。