在工作之余遵绰,做一些備忘是很重要的,之前在新浪博客真的是坑爹椿访,吭哧吭哧幾個(gè)小時(shí)的東西一不小心就全軍覆沒...2017在簡(jiǎn)書重新開始啦...
git可以說是每一個(gè)程序員最基本的代碼管理工具,之前用SVN的都能深刻的感受到git的強(qiáng)大之處加酵,在第三方工具橫行的時(shí)代猪腕,有時(shí)候適當(dāng)?shù)氖褂靡恍┟顣?huì)是代碼管理更加便捷荣病。(注:git的第三方工具最常見的就是sourceTree,之前用的時(shí)候感覺太過啰嗦脖岛,不過簡(jiǎn)潔颊亮,后來改用gitX柴梆,一直沿用到現(xiàn)在终惑,文章末尾附百度云地址雹有,各位需要可以自行下載)。
說到git霸奕,大家通常會(huì)和SVN做對(duì)比,首先一個(gè)截然不懂的地方就是质帅,git有一個(gè)神器一般存在的暫存區(qū)。對(duì)于git嫉嘀,除了工作區(qū)(也就是你需要編輯的那個(gè)文件的區(qū)域)魄揉,版本庫中有一個(gè)神器的暫存區(qū),Git的版本庫里存了很多東西瓣俯,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支master降铸,以及指向master的一個(gè)指針叫HEAD摇零。從我個(gè)人看來,暫存區(qū)可以統(tǒng)一工作區(qū)多次修改統(tǒng)一提交谅畅,從很大程度上緩解對(duì)于版本庫分支的復(fù)雜操作噪服,增加容錯(cuò)性。
一、本地管理
1. 提交操作
(1). 配置全局用戶名和郵箱 ?
配置用戶名 : git config --global user.name "ys"
配置郵箱 : ?git config --global user.email "ys@163.com"
獲取全局配置信息 : git config --list
(2). 創(chuàng)建倉庫
cd到你想要?jiǎng)?chuàng)建倉庫的地址嬉愧,運(yùn)行 ?git init ,你會(huì)發(fā)現(xiàn)根目錄下多了一個(gè).git的文件夾王财,那么你的本地倉庫就已經(jīng)建好了
(3). 忽略文件
有時(shí)候有些文件我們不想每次提交裕便,那么我們可以配置.gitignore,并把它放到根目錄闪金,忽略該文件的效果。eg:在里面添加 .DS_Store囱嫩,則不會(huì)對(duì)該文件的修改加入到工作區(qū)中漏设。有些已經(jīng)跑過的項(xiàng)目,你會(huì)發(fā)現(xiàn)你在.gitignore加入 xcuserdata/ 后郑口,UserInterfaceState.xcuserstate這個(gè)文件還是頻繁更新盾鳞,擾人至極瞻离,去掉這個(gè)文件的具體步驟如下:
到目錄下把這個(gè)文件直接干掉,然后commit這次修改推励,重啟Xcode就好了肉迫。
或者使用命令行:
git rm --cached 該文件路徑
git commit -m "Removed stupid file"
(4). 查看倉庫的當(dāng)前狀態(tài)
git status ? 查看當(dāng)前文件狀態(tài)
git diff ? 查看當(dāng)前改動(dòng)
git diff HEAD -- filename ?查看該文件工作區(qū)與當(dāng)前版本庫的差別
(5). 查看之前的所有l(wèi)og
git log ?查看詳細(xì)改動(dòng)
git log --pretty=oneline ? 簡(jiǎn)單方式查看版本改動(dòng)
(6). 從工作區(qū)添加到暫存區(qū)
git add filename.txt ? 添加單個(gè)文件
git add *.txt ? 添加所有txt文件
git add . ?添加所有文件
(7). 丟棄工作區(qū)中的修改
git checkout -- filename ? 丟棄對(duì)應(yīng)文件的修改
git checkout head . ?丟棄所有工作區(qū)的修改
(8). 將暫存的修改還原到工作區(qū)
git reset head ?或者 git reset head filename
(9). 將暫存區(qū)的改動(dòng)上傳到倉庫
git commit -m "commitSomething"
(10). 版本回歸
首先,Git必須知道當(dāng)前版本是哪個(gè)版本跌造,在Git中族购,用HEAD表示當(dāng)前版本,也就是最新的提交74399b158f9c557486c0f0074483e78f1184bb7c(注意我的提交ID和你的肯定不一樣)寝杖,上一個(gè)版本就是HEAD^,上上一個(gè)版本就是HEAD^^醉拓,當(dāng)然往上100個(gè)版本寫100個(gè)^比較容易數(shù)不過來收苏,所以寫成HEAD~100。
在這里鹿霸,介紹一下 --hard --soft --mix(默認(rèn))
git reset --mixed:此為默認(rèn)方式,不帶任何參數(shù)的git reset钻哩,即時(shí)這種方式肛冶,它回退到某個(gè)版本,只保留源碼珊肃,回退commit和index信息
git reset --soft:回退到某個(gè)版本,只回退了commit的信息伦乔,不會(huì)恢復(fù)到index file一級(jí)。如果還要提交爱只,直接commit即可
Git reset? --hard:徹底回退到某個(gè)版本招刹,本地的源碼也會(huì)變?yōu)樯弦粋€(gè)版本的內(nèi)容
git reset --hard HEAD^ ? 回滾到上一個(gè)版本
注:我來個(gè)擦,突然發(fā)現(xiàn)回滾錯(cuò)了蔗喂,天雷滾滾啊高帖,怎么回去呢?在沒關(guān)閉命令行的前提下乖阵,找到上次git log的日志预麸,找到對(duì)應(yīng)的版本號(hào),輸入git reset --hard 74399b158f9c557486c0f0074483e78f1184bb7c ?你會(huì)發(fā)現(xiàn)吏祸,我的天,最后一條數(shù)據(jù)又回來了蹈矮。哎呀鸣驱,如果你說我都已經(jīng)關(guān)了命令行了,別擔(dān)心踊东,你需要另外一個(gè)查看所有執(zhí)行過的命令的神奇的 git reflog,你會(huì)神奇的發(fā)現(xiàn)所有的版本號(hào)都能看得到再芋,于是你學(xué)會(huì)了上面的方式坚冀,成功回到人生巔峰。
2. 分支管理
(1). 創(chuàng)建分支
git checkout -b branchName (相當(dāng)與: git branch branchName ? ? ?git checkout branchName兩句命令)
git branch branchName b281e9cd7048a3ad70b5159ba47d4205eb476608 ?在指定節(jié)點(diǎn)創(chuàng)建分支
(2). 查看當(dāng)前所有分支以及狀態(tài)
git branch
(3). 合并分支
git merge branchName ? 用于合并指定分支到當(dāng)前分支
(4). 刪除分支
git branch -d branchName ?刪除指定分支
二联喘、遠(yuǎn)程管理
首先登陸github創(chuàng)建一個(gè)遠(yuǎn)程倉庫,獲取到遠(yuǎn)程倉庫的地址豁遭。(https://git.oschina.net/yang_shuai/gitTest.git)
(2). 克隆遠(yuǎn)程倉庫
git clone https://git.oschina.net/yang_shuai/gitTest.git
(2). 查看本地遠(yuǎn)程倉庫狀態(tài)
git remote -v
(3). 鏈接遠(yuǎn)程倉庫
git remote add origin https://git.oschina.net/yang_shuai/gitTest.git
(4). 清除遠(yuǎn)程倉庫
git remote rm origin
(5). 獲取遠(yuǎn)程庫數(shù)據(jù)單不合并
git fetch origin
(6). 將本地分支推送到遠(yuǎn)程分支并合并
git push origin master:master ?master為分支名蓖谢,前面的master為本地分支名,后面的master為遠(yuǎn)程分支名
(7). 獲取并合并遠(yuǎn)程分支的兩種方法
第一種: 使用git fetch 獲取到當(dāng)前最新的遠(yuǎn)程分支闪幽,然后使用git merge origin/master 進(jìn)行合并。
第二種:直接使用 git pull origin master:master 獲取并直接合并到對(duì)應(yīng)分支溉知。
針對(duì)兩種獲取合并方式腕够,個(gè)人更推崇第一種,首先可以知道隊(duì)友都改了些什么帚湘,另外可以準(zhǔn)確的進(jìn)行一對(duì)多的合并。
三捅厂、沖突解決
對(duì)于部分新手來說资柔,解決沖突可以說是頭疼的問題。目前有兩種解決沖突的方式建邓。
第一種:修改當(dāng)前文件官边,也就是說在你編輯的文件中直接修改然后git add . ,git commit -m “mergeok”注簿,手動(dòng)保留你想要的修改。
第二種:自動(dòng)解決沖突的工具捐晶,不過我還是不叫喜歡第一種,可控性強(qiáng)惑灵。
四、標(biāo)簽操作
git tag v1.0.0 (后面可加版本號(hào)在固定節(jié)點(diǎn)打上tag)
git tag ? 查看所有標(biāo)簽佩憾。
git tag -d v1.0.0 ?刪除名稱為v1.0.0的本地標(biāo)簽
git push origin :refs/tags/v1.0.0 ?刪除名稱為v1.0.0的遠(yuǎn)程倉庫標(biāo)簽
GitX鏈接: https://pan.baidu.com/s/1pKZayDX ? 密碼: txfj