多用Git少交稅

jopen 9年前發布 | 22K 次閱讀 Git

一、為什么要了解Git

Git是一套版本管理系統。看到“Git版本管理”,一大部分盆友已經轉身想走,在你握著門把手準備開門走人時,請最后聽我說完最后一句:人人都需要版本管理,git可以幫你少交停電/藍屏/死機稅,提高產出效率,不來一發嗎?

試過半夜寫匯報ppt嗎?'匯報ppt'→'匯報ppt1'→'匯報ppt11'→'匯報ppt2015-03-17'→'匯報 ppt2015-03-17新'→'匯報ppt2015-03-17新1'……無休止的命名斗爭,這就是自然而然的版本管理,只不過,沒有好的工具,所以 顯得一團mess。

無論學生黨還是設計師(改20個版本后終于順利用回第1版),無論公眾號運營還是音樂人,都持續產出著自己的“半成品/作品”。99.999%的作 品都不可能一氣呵成,比如這篇筆記的第一個commit版本,簡直慘不忍睹。如果有版本管理意識,以及高效、方便的工具,生活也許可以簡單許多,更不要說 天有不測風云的停電忘保存、腦殘刪備份等等好事等著我們。

來吧,fork有用有趣的東西,git你應該在意的東西,日拱一卒,打造我們的作品。

二、Git主要概念

Git實現在本地和遠端進行版本管理。

1.工作空間

四個空間概念:工作目錄(workspace),暫存區(index),本地倉庫(local repository),遠程倉庫(remote repository)

想象一下,我們開一個包子店(圖片做的不是同一款包子,見諒)~

  • 首先,得有一張大桌子用來和面、搟皮兒、包餡等等,這張桌子相當于workspace,隨你折騰的地方,工作主要都在這里進行。
多用Git少交稅
  • 然后,包好的包子們會放到一個蒸籠里,等待被蒸,這個蒸籠就是index暫存區。蒸籠用來放我們想保留的成品或半成品,至于選哪些賣出去,這是以后考慮的事情。
多用Git少交稅
  • 下一步,蒸包子。蒸好的包子已經可以吃了,但是我們還是得先把它們從蒸籠拿出來放在盤子里。盤子就類似本地倉庫local repository,里面都是等待出貨的好東西。當然,你也可以在最后一刻把看不順眼的包子扔掉,或者自己吃掉。
多用Git少交稅
  • 最后一步就是把包子送到貨架/客人的桌上。公之于眾的貨架,就是遠程倉庫remote repository,丑媳婦終于見公婆啦。
多用Git少交稅

配合下面這張圖,我們對Git就有一個基本概念了。

多用Git少交稅
via osteele.com

2.Head & branch & master & origin

Git系統的實質更像是一棵大樹,樹干(就是Head啦)是最后一次提交的成果。在樹干上,你可以開無數的分支(就是branch啦)胡弄,弄亂了 也不怕,大不了剪掉再開一個,樹干不受任何影響。折騰ok的分支,最后可以merge到默認branch也就是master上。

用技術性語言描述,分支用來將特性開發絕緣開來。在創建倉庫的時候,master 是“默認的”分支。在其他分支上進行開發,完成后再將它們合并到主分支上。

多用Git少交稅

那origin又是什么?origin是遠程默認的倉庫。clone完成之后,Git會自動將遠程倉庫命名為origin。

那Head和master又是什么關系?Head其實只是個指針,指向當前最近commit的branch。而master是本地默認的 branch,所以Head經常都是指向master。另外Head是官方定義的,而master和origin都是大家常用的命名,并不一定要叫 master和origin。[2]

3.工作流:add & commit & push

  • 把包子從桌子挪到蒸籠,叫add————已修改modified————匯報ppt初稿寫成;
  • 把包子從蒸籠挪到盤子,叫commit————已暫存staged————匯報ppt完稿存到u盤/網盤什么的;
  • 把包子從盤子挪到貨架,叫push————已提交commited——匯報ppt發送到boss郵箱。
多用Git少交稅

Git的好處之一是,包子包好后,還可以回退……


捷徑:


三、配置

1.工作目錄
2.本地倉庫
3.遠程倉庫

四、常用命令

最常用:git command --help

1.創建

需要進入目標目錄進行操作

  • 創建新倉庫:git init
  • 創建一個本地倉庫的克隆版本:git clone /path/to/repository
  • 克隆遠端服務器上的倉庫: git clone username@host:/path/to/repository

2.查詢

git status

  • staged:已在index,等待被commit.
  • unstaged:文件做了改動,但還不能被commit.
  • untracked:Git還沒有開始跟蹤,需要先add.
  • deleted:文件已被刪除,等待remove.

Staging Area:commit前把文件們收集到一起,以便打包commit。

3.add/添加

  • 添加到暫存區(讓Git開始跟蹤更改,也就是從untracked變為tracked):git add <filename>git add *
  • 添加全部文件:git add -A, -A 表示包含刪除的文件。
  • git reset: git reset <filename> 從staging area移除文件。

4.commit/提交

"commit" 可以理解為一次快照,幫助我們把所有改動以timeline的方式組織起來。

  • 提交改動(到head,但還沒到遠程服務器):git commit -m "代碼提交信息" git commit -m 'Add all files'

  • 把所有當前目錄下的文件加入暫存區域再運行commit:git commit -a

  • 提交到遠程倉庫:git push origin master (可以把 master 換成你想要推送的任何分支)。
    如果還沒有克隆現有倉庫,并想將倉庫連接到某個遠程服務器:git remote add origin <server>

5.push/推送

將文件推送到遠程倉庫中:git push -u origin master。遠程倉庫默認叫origin 。-u 告訴Git記住參數,下次可以直接使用push。

6.pull/拉取

更新本地倉庫至最新改動:git pull origin master

7.checkout/切換

checkout命令用于從歷史提交(或者暫存區域)中拷貝文件到工作目錄,也可用于切換分支

  • 切換分支: git checkout <branch>

  • 新建并切換到分支:git checkout -b new_branch 等同于:git branch new_branch + git checkout new_branch

  • 把文件從暫存區域復制到工作目錄,用來丟棄本地修改:git checkout --<files>

  • 回滾到復制最后一次提交:git checkout HEAD -- <files>

8.diff/比對

git diff

9.reset/撤銷

  • 從index中撤銷所有文件:git reset
  • 從index中撤銷最后一次add的文件:git reset --<flies>
  • 恢復之前版本:git reset --hard
  • 回滾到最近一次:git checkout -- <target>

10.merge

合并其他分支到當前分支:git merge

11.remove & clean

  • 從硬盤和index移除文件:git rm

  • 刪除分支git branch -d <branch name>

五、待解決問題

  • 每次push需要輸入github用戶名密碼

Ref

[1]. Git簡明指南
[2]. What are the git concepts of HEAD, master, origin?
[3]. Try Git
[4]. 圖解Git
[5]. Pro Git中文版
[6]. Gitmagic中文版

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!