GIT學習筆記

初始設(shè)置

git config --global user.name "lanbin"
git config --global user.email "imlanbin@163.com"

創(chuàng)建倉庫

git init

創(chuàng)建完畢目錄會多了個.git的隱藏文件夾

版本回退

  • HEAD指向的版本就是當前版本,因此耕餐,Git允許我們在版本的歷史之間穿梭斤程,使用命令git reset --hard commit_id
  • 穿梭前寸癌,用git log可以查看提交歷史,以便確定要回退到哪個版本于未。
  • 要重返未來撕攒,用git reflog查看命令歷史,以便確定要回到未來的哪個版本烘浦。

本地倉庫

image
  1. git add把文件添加進去抖坪,實際上就是把文件修改添加到暫存區(qū);

  2. git commit提交更改闷叉,實際上就是把暫存區(qū)的所有內(nèi)容提交到當前分支擦俐。

  3. git status查看狀態(tài)

  4. git diff HEAD -- readme.txt命令可以查看工作區(qū)和版本庫里面最新版本的區(qū)別

  5. git checkout -- readme.txt可以丟棄工作區(qū)的修改

  6. git reset HEAD <file> 可以把暫存區(qū)的修改撤銷掉(unstage),重新放回工作區(qū)

  7. git rm test.txt刪掉文件握侧,并且git commit

  8. 在文件系統(tǒng)上誤操作刪除了文件蚯瞧,可以用git checkout -- test.txt還原

image
image

GIT把內(nèi)容按元數(shù)據(jù)方式存儲,而SVN是按文件方式存儲品擎,git管理的是修改而不是文件埋合;

SVN在Commit前,我們都建議是先Update一下萄传,跟本地的代碼編譯沒問題甚颂,并確保開發(fā)的功能正常后再提交,這樣其實挺麻煩的秀菱,有好幾次同事沒有先Updata西设,就Commit了,發(fā)生了一些錯誤答朋,耽誤了大家時間,Git可能這種情況會少些棠笑。

遠程倉庫

先有本地庫梦碗,后有遠程庫的時候,如何關(guān)聯(lián)遠程庫

  1. 首先登陸GitHub,然后洪规,在右上角找到“Create a new repo”按鈕印屁,創(chuàng)建一個新的倉庫

  2. 添加到遠程倉庫

git remote add origin git@github.com:lanbin/learngit.git

遠程庫的名字就是origin

  1. 推送到遠程倉庫
git push -u origin master

先創(chuàng)建遠程庫,然后斩例,從遠程庫克隆

  1. 從遠程倉庫克隆
$ git clone git@github.com:lanbin/learngit.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Receiving objects: 100% (3/3), done.

Git支持多種協(xié)議雄人,包括https,但通過ssh支持的原生git協(xié)議速度最快念赶。

分支管理

HEAD指向的就是當前分支

  1. git checkout命令加上-b參數(shù)表示創(chuàng)建并切換
$ git checkout -b dev
Switched to a new branch 'dev'
  1. 用git branch命令查看當前分支
$ git branch
* dev
  maste
  1. 切換回master分支
$ git checkout master
Switched to branch 'master'
  1. 把dev分支的工作成果合并到master分支上
$ git merge dev
Updating d46f35e..b17d20e
Fast-forward
 readme.txt | 1 +
 1 file changed, 1 insertion(+)
  1. 合并完成后础钠,就可以放心地刪除dev分支了
$ git branch -d dev
Deleted branch dev (was b17d20e

Git鼓勵大量使用分支:

  1. 查看分支:git branch
  2. 創(chuàng)建分支:git branch <name>
  3. 切換分支:git checkout <name>
  4. 創(chuàng)建+切換分支:git checkout -b <name>
  5. 合并某分支到當前分支:git merge <name>
  6. 刪除分支:git branch -d <name>

沖突管理

  1. 如果存在沖突,將合并失敗并有提示
    $ git merge feature1
    Auto-merging readme.txt
    CONFLICT (content): Merge conflict in readme.txt
    Automatic merge failed; fix conflicts and then commit the result.

  2. git status也可以告訴我們沖突的文件

$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)

    both modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

可以直接查看readme.txt的內(nèi)容

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
  1. 修改后再提交叉谜,然后用帶參數(shù)的git log也可以看到分支的合并情況
$ git log --graph --pretty=oneline --abbrev-commit
*   cf810e4 (HEAD -> master) conflict fixed
|\  
| * 14096d0 (feature1) AND simple
* | 5dc6824 & simple
|/  
* b17d20e branch test
* d46f35e (origin/master) remove test.txt
* b84166e add test.txt
* 519219b git tracks changes
* e43a48b understand how stage works
* 1094adb append GPL
* e475afc add distributed
* eaadf4e wrote a readme file
  1. git log --graph命令可以看到分支合并圖旗吁。
  2. 當Git無法自動合并分支時,就必須首先解決沖突停局。解決沖突后很钓,再提交,合并完成
  3. 解決沖突就是把Git合并失敗的文件手動編輯為我們希望的內(nèi)容董栽,再提交码倦。

分支管理策略

  1. master分支應(yīng)該是非常穩(wěn)定的,也就是僅用來發(fā)布新版本锭碳,平時不能在上面干活袁稽;
  2. dev分支是不穩(wěn)定的,到某個時候工禾,比如1.0版本發(fā)布時运提,再把dev分支合并到master上,在master分支發(fā)布1.0版本闻葵;
  3. 開發(fā)者都在dev分支上干活民泵,每個人都有自己的分支,時不時地往dev分支上合并就可以了槽畔。

所以栈妆,團隊合作的分支看起來就像這樣:

image

BUG分支

修復(fù)bug時,我們會通過創(chuàng)建新的bug分支進行修復(fù)厢钧,然后合并鳞尔,最后刪除;
當手頭工作沒有完成時早直,先把工作現(xiàn)場git stash寥假,然后去修復(fù)bug,修復(fù)后霞扬,再git stash pop糕韧,回到工作現(xiàn)場枫振。

  1. git stash命令把工作現(xiàn)場“儲藏”起來
$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge
  1. git stash list命令看看儲存清單
$ git stash list
stash@{0}: WIP on dev: f52c633 add merge
  1. 用git stash apply從儲存恢復(fù)到工作現(xiàn)場,恢復(fù)后stash內(nèi)容并不刪除

  2. 用git stash drop命令來刪除儲存

  3. git stash pop = git stash apply + git stash drop

feature分支

  1. 開發(fā)一個新實驗功能萤彩,最好新建一個分支粪滤;
  2. 如果要丟棄一個沒有被合并過的分支,可以通過git branch -D <name>強行刪除雀扶;

推送分支

  1. 查看遠程庫信息杖小,使用git remote -v;

  2. 本地新建的分支如果不推送到遠程愚墓,對其他人就是不可見的予权;

  3. 從本地推送分支,使用git push origin branch-name转绷,如果推送失敗伟件,先用git pull抓取遠程的新提交;

  4. 在本地創(chuàng)建和遠程分支對應(yīng)的分支议经,使用git checkout -b branch-name origin/branch-name斧账,本地和遠程分支的名稱最好一致;

  5. 建立本地分支和遠程分支的關(guān)聯(lián)煞肾,使用git branch --set-upstream branch-name origin/branch-name咧织;

  6. 從遠程抓取分支,使用git pull籍救,如果有沖突习绢,要先處理沖突。

哪些分支需要推送蝙昙,哪些不需要呢闪萄?

  1. master分支是主分支,因此要時刻與遠程同步奇颠;
  2. dev分支是開發(fā)分支败去,團隊所有成員都需要在上面工作,所以也需要與遠程同步烈拒;
  3. bug分支只用于在本地修復(fù)bug圆裕,就沒必要推到遠程了,除非老板要看看你每周到底修復(fù)了幾個bug荆几;
  4. feature分支是否推到遠程吓妆,取決于你是否和你的小伙伴合作在上面開發(fā)。

合并分支

image
image
image

在rebase的過程中吨铸,也許會出現(xiàn)沖突(conflict). 在這種情況行拢,Git會停止rebase并會讓你去解決 沖突;在解決完沖突后诞吱,用"git-add"命令去更新這些內(nèi)容的索引(index), 然后剂陡,你無需執(zhí)行 git-commit,只要執(zhí)行:

$ git rebase --continue

這樣git會繼續(xù)應(yīng)用(apply)余下的補丁狈涮。

在任何時候,你可以用--abort參數(shù)來終止rebase的行動鸭栖,并且"mywork" 分支會回到rebase開始前的狀態(tài)

$ git rebase --abort

標簽管理

  1. 命令git tag <tagname>用于新建一個標簽,默認為HEAD握巢,也可以指定一個commit id晕鹊;
  2. 命令git tag -a <tagname> -m "blablabla..."可以指定標簽信息;
  3. 命令git tag可以查看所有標簽暴浦。
  4. 命令git show <tagname>查看標簽信息
  5. 命令git push origin <tagname>可以推送一個本地標簽溅话;
  6. 命令git push origin --tags可以推送全部未推送過的本地標簽;
  7. 命令git tag -d <tagname>可以刪除一個本地標簽歌焦;
  8. 命令git push origin :refs/tags/<tagname>可以刪除一個遠程標簽飞几。

使用github

  1. 在GitHub上,可以任意Fork開源倉庫
    eg. https://github.com/twbs/bootstrap
  2. 自己擁有Fork后的倉庫的讀寫權(quán)限独撇;
    點“Fork”就在自己的賬號下克隆了一個bootstrap倉庫屑墨,然后從自己的賬號下clone
git clone git@github.com:lanbin/bootstrap.git

  1. 可以推送pull request給官方倉庫來貢獻代碼。
    對方是否接受你的pull request就不一定了

使用碼云gitee

廖雪峰Git教程-使用碼云

自定義Git

忽略特殊文件

  1. 忽略某些文件時纷铣,需要編寫.gitignore卵史;
  2. .gitignore文件本身要放到版本庫里,并且可以對.gitignore做版本管理

參考文獻

  1. 廖雪峰Git教程
  2. Git Community Book 中文版
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搜立,一起剝皮案震驚了整個濱河市以躯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啄踊,老刑警劉巖忧设,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異颠通,居然都是意外死亡址晕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門蒜哀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斩箫,“玉大人,你說我怎么就攤上這事撵儿〕丝停” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵淀歇,是天一觀的道長易核。 經(jīng)常有香客問我,道長浪默,這世上最難降的妖魔是什么牡直? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任缀匕,我火速辦了婚禮,結(jié)果婚禮上碰逸,老公的妹妹穿的比我還像新娘乡小。我一直安慰自己,他們只是感情好饵史,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布满钟。 她就那樣靜靜地躺著,像睡著了一般胳喷。 火紅的嫁衣襯著肌膚如雪湃番。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天吭露,我揣著相機與錄音吠撮,去河邊找鬼。 笑死讲竿,一個胖子當著我的面吹牛泥兰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戴卜,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼逾条,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了投剥?” 一聲冷哼從身側(cè)響起师脂,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎江锨,沒想到半個月后吃警,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡啄育,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年酌心,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挑豌。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡安券,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氓英,到底是詐尸還是另有隱情侯勉,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布铝阐,位于F島的核電站址貌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜练对,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一遍蟋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧螟凭,春花似錦虚青、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至烟号,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間政恍,已是汗流浹背汪拥。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留篙耗,地道東北人迫筑。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像宗弯,于是被迫代替她去往敵國和親脯燃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容