Git 是分布式的代碼管理工具,遠(yuǎn)程的代碼管理基于SSH的,配置SSH的步驟如下:
一、設(shè)置Git的user name和email:
$ git config --global user.name "xxx"
$ git config --global user.email "aaa.bbb@xxx.com"
二疆拘、生成SSH密鑰過程:
1、查看是否已經(jīng)有了ssh密鑰:
$ cd ~/.ssh
$ ls
2寂曹、生成密鑰:
$ ssh-keygen -t rsa -C "aaa.bbb@xxx.com"
按三個回車入问,密碼為空。
Your identification has been saved in /home/tekkub/.ssh/id_rsa.
Your public key has been saved in /home/tekkub/.ssh/id_rsa.pub.
The key fingerprint is: ...........
最后得到了兩個文件:id_rsa和id_rsa.pub
3稀颁、添加密鑰到ssh:
ssh-add 文件名芬失,需要之前輸入的密碼。
ssh-add id_rsa
4匾灶、在git上添加密鑰棱烂,需要添加到git上的是id_rsa.pub,此時(shí)登錄賬號阶女,即可clone颊糜,pull,push代碼了秃踩。
Git的簡單使用
1衬鱼、設(shè)置別名
設(shè)置別名可以是git命令變得簡單一些,個人習(xí)慣常用的別名如下:
$ git config --global alias.cm commit
$ git config --global alias.st status
$ git config --global alias.ck checkout
$ git config --global alias.br branch
2憔杨、git add
git add指令分為git add -A ,git add -u鸟赫,git add .和git add <fileName>
- git add . : 他會監(jiān)控工作區(qū)的狀態(tài)樹,使用它會把工作時(shí)的所有變化提交到暫存區(qū)消别,包括文件內(nèi)容修改(modified)以及新文件(new)抛蚤,但不包括被刪除的文件(git v1.0)。
- git add -u : 他僅監(jiān)控已經(jīng)被add的文件(即tracked file)寻狂,他會將被修改的文件提交到暫存區(qū)岁经。add -u 不會提交新文件(untracked file)。(git add --update的縮寫)
- 是上面兩個功能的合集(git add --all的縮寫)
- git add <fileName> : 添加某個指定文件到緩存區(qū)蛇券。
在 git 2.0版本之后缀壤,git add . 和 git add -A 是一樣的效果。
3纠亚、git commit -m "xxxxxx"
此命令用于給提交添加注釋塘慕,使用git log指令即可查看每次commit的注釋了。
4菜枷、git pull 和 git push
- git pull origin <branch>: 相當(dāng)于git fetch + git merge苍糠,拉取遠(yuǎn)程分支并merge叁丧。
- git pull --rebase : 相當(dāng)于git fetch + git rebase啤誊,拉取遠(yuǎn)程分支并進(jìn)行rebase操作岳瞭。
- git push origin <branch>:將本地緩存推送到遠(yuǎn)程分支。
5蚊锹、git merge 和 git rebase 的區(qū)別
舉個例子:
A和B兩個人進(jìn)行合作開發(fā)瞳筏,同時(shí)在develop分支上開啟各自的功能分支featureA和featureB進(jìn)行開發(fā),A在10:00提交了A1牡昆,12:00提交了A2姚炕,16:00提交了A3,并且合并到develop分支丢烘,此時(shí)develop分支狀態(tài)為:
Head -> A1 -> A2 -> A3
而B則分別在9:00提交了B1柱宦,在11:00提交了B2,在17:00提交了B3播瞳,此時(shí)對于B來說掸刊,合并到develop分支有兩種方式,使用rebase和merge赢乓。
// 根據(jù)提交的先后順序進(jìn)行排序
merge : Head -> B1 -> A1 -> B2 -> A2 -> A3 -> B3
// 根據(jù)提交的先后進(jìn)行排序
rebase: Head -> A1 -> A2 -> A3 -> B1 -> B2 -> B3
6忧侧、git branch
列出本地已經(jīng)存在的分支,并且在當(dāng)前分支的前面加“*”號標(biāo)記牌芋。
git branch -r
: 列出遠(yuǎn)程分支
git branch -a
: 列出本地分支和遠(yuǎn)程分支
git branch <name>
: 創(chuàng)建一個新的本地分支
git branch -m oldbranch newbranch
: 重命名分支
git branch -d branchname
: 刪除本地分支
git push origin --delete branchname
:刪除遠(yuǎn)程分支
7蚓炬、git remote
列出已經(jīng)存在的遠(yuǎn)程分支
git remote -v
: 列出詳細(xì)信息,在每一個名字后面列出其遠(yuǎn)程url
origin git@172.17.0.18:iOS/ttgenwomai_certificates.git (fetch)
origin git@172.17.0.18:iOS/ttgenwomai_certificates.git (push)
git remote add <name> <url>
:在url創(chuàng)建名字為name的倉庫躺屁,name為遠(yuǎn)程倉庫的名字肯夏。
8、git checkout
遷出一個分支的特定版本犀暑。默認(rèn)是遷出分支的HEAD版本熄捍。
git checkout master
:取出master版本的head。
git checkout <branchname> <filename>
:放棄對xx分支的xx文件的修改母怜,如果是當(dāng)前分支余耽,<branchname>可以省略。
git checkout .
: 放棄所有的修改苹熏。
9碟贾、git stash 和 git pop
git stash
:是備份當(dāng)前的工作區(qū)的內(nèi)容,從最近的一次提交中讀取相關(guān)內(nèi)容轨域,讓工作區(qū)保證和上次提交的內(nèi)容一致袱耽。同時(shí),將當(dāng)前的工作區(qū)內(nèi)容保存到Git棧中干发。
git stash pop
:從Git棧中讀取最近一次保存的內(nèi)容朱巨,恢復(fù)工作區(qū)的相關(guān)內(nèi)容。由于可能存在多個Stash的內(nèi)容枉长,所以用棧來管理冀续,pop會從最近的一個stash中讀取內(nèi)容并恢復(fù)琼讽。
git stash list
:顯示Git棧內(nèi)的所有備份,可以利用這個列表來決定從那個地方恢復(fù)洪唐。
git stash clear
:清空Git棧钻蹬。此時(shí)使用gitg等圖形化工具會發(fā)現(xiàn),原來stash的哪些節(jié)點(diǎn)都消失了凭需。
10问欠、tag
// 列出本地tag
$ git tag
// 添加tag
$ git tag -a v0.1.2 -m “0.1.2版本”
// 切換到tag的位置
$ git checkout -b [branch] [tagname]
// 刪除tag
$ git tag -d [tagname]
// 推tag
$ git push origin –tags
$ git push origin [tagname]
關(guān)于git開發(fā)過程中,推薦使用git flow 進(jìn)行管理粒蜈,比較方便靈活顺献,適合多人開發(fā)團(tuán)隊(duì)。以上都是開發(fā)中遇見的指令枯怖,如果錯誤滚澜,請及時(shí)指出。