你已經會用 Git 了嗎?

cnhc9658 7年前發布 | 38K 次閱讀 Git iOS開發 版本控制系統

工作中很多同學已經會使用 Git 了,然而對各個概念比較模糊,這里主要理清 Git 中的各個概念,更好的理解 Git。如果你還不知道如何使用 Git,可以參考 @廖雪峰 廖雪峰 的文章。我也是一名 Git 菜鳥,看完 @畫渣程序猿mmoaay 寫的 Git 教程后,自己利用業余時間從頭學習了 Git。更多內容可以參考 官網

命令行

使用 Git 時,我們完全可以利用 Git 命令行來完成我們的工作,但是通常情況下使用Git工具比較方便。比如:SoureTree。但是有時候不得不使用命令行,所以還是踏踏實實學習一下 Git 命令吧,當然詳細的命令可以參考官方文檔。

  • git init: 初始化一個空的 Git。在桌面上創建一個文件夾,然后創建一個空的 Git,執行完 git init 命令后,會新建一個隱藏的文件夾 .git。

$ mkdir lefeGit
$ cd lefeGit
$ git init

lefeGit 相當于一個倉庫(repository)也稱為我們的工作區,這里的文件將被 git 管理。

  • git add: 把工作區的內容提交到暫存區;

$ touch lefe.js // 創建一個 lefe.js 文件
$ git add lefe.js // 把 lefe.js 文件修改的內容提交到暫存區
$ git add * // 把當前工作區所以修改過的內容一次提交到暫存區
  • git commit: 把當前修改的內容提交到當前分支;

$ vi lefe.js // 編輯 lefe.js 文件
$ git add * // 把 lefe.js 文件修改的內容提交到暫存區
$ git commit -m 'add lefe' // 把當前修改的內容提交到當前分支,初始化git
的時候,會默認創建一個 master 分支,-m 后是提交時的備注
  • git log: 顯示從最近到最遠的提交日志

  • git log --pretty=oneline: 顯示從最近到最遠的提交日志,單行顯示

  • git reflog: 查看命令歷史

$ git log
commit a7fcde1af5f78af8e44290f3951bb159a9bbcac0 (HEAD -> master)
Author: wangsuyan 






Date:   Thu Nov 2 16:23:35 2017 +0800
    add lefe

$ git log --pretty=oneline
a7fcde1af5f78af8e44290f3951bb159a9bbcac0 (HEAD -> master) add lefe


  
  • git checkout -- file: 修改未提交到暫存區的文件

$ git checkout lefe.js // 撤銷還沒有提交到暫存區的更改,這是被修改的內容還在工作區中
  • git reset HEAD file: 修改添加到暫存區的文件

$ git reset HEAD lefe.js // 撤銷修改的文件到暫存區
$ git checkout lefe.js // 撤銷對 lefe.js 文件的修改
  • git reset --hard HEAD^: 回到上一次提交的

  • git reset --hard HEAD~100: 回到前100次提交的

  • git reset --hard b3a2ba0d9f92d3f: 回退到指定的版本

$ git reset --hard HEAD^
HEAD is now at a7fcde1 add lefe
  • git status: 查看修改的狀態

$ git status
On branch master
Changes not staged for commit:
  (use "git add 





 ..." to update what will be committed)
  (use "git checkout -- 



     ..." to discard changes in working directory) modified: lefe.js no changes added to commit (use "git add" and/or "git commit -a") 



  
  • git diff: 查看文件的差異

$ git diff
diff --git a/lefe.js b/lefe.js
index b245919..8999741 100644
--- a/lefe.js
+++ b/lefe.js
@@ -1 +1,2 @@
  Hello lefe
+wsy
  • git clone:克隆一個倉庫到本地,當你在遠程倉庫創建一個庫后,使用 git clone 把項目克隆到本地;

$ git clone git@github.com:lefex/wsyLefe.git
  • git remote add orgin git@github.com:lefex/wsyLefe.git 本地倉庫關聯一個遠程庫;

// 當你本地創建一個倉庫后,需要提交到遠程倉庫時,就需要把本地倉庫和遠程倉庫進行關聯,這樣就可以把本地的代碼提交到遠程倉庫了,orgin 為遠程倉庫的名字,可以自定義
$ git remote add orgin git@github.com:lefex/gitLearn.git 
// 查看所關聯的遠程倉庫
$ git remote -v
orgin   git@github.com:lefex/wsyLefe.git (fetch)
orgin   git@github.com:lefex/wsyLefe.git (push)
// 如果本地已經關聯了遠程倉庫,需要刪除后重新關聯,當然也可以同時關聯多個遠程倉庫
$ git remote rm origin
// 由于第一次提交,遠程倉庫是空的,需要把遠程master倉庫和本地的master倉庫關聯起來,以后可以直接使用 git push 來提交代碼
$ git push -u orgin master
  • HEAD: 指向當前分支;

  • git checkout -b dev: 創建一個 dev 分支,并切換到 dev 分支;

$ git checkout -b dev
$ git branch hot  // 創建 hot 分支
$ git checkout hot // 切換到 hot 分支
$ git branch // 查看所有分支
$ git merge hot // 合并 hot 分支到當前分支
$ git branch -d hot // 刪除 hot 分支
  • 如果分支合并時出現沖突,git 使用<<<<<<<HEAD, ======= 和 >>>>>>> dev 標記沖突的分支,HEAD 表示當前分支,dev 表示 dev 分支;

 Hello lefe
<<<<<<< HEAD
wsy add master
=======
add dev
>>>>>>> dev
  • 當你正在dev分支上開發一個新功能時,突然老板說線上有個 bug 必須修復一下,然后提交個版本。咋辦,新功能還需要1天才能寫完,還不能提交。使用 git stash 可以暫存你所修改的內容。然后從主分支新建一個分支來修改bug,修改完后與主分支合并,bug修改完后可以繼續開發新功能。git stash list 查看暫存的內容,git stash pop 恢復暫存的內容,也可以使用 git stash apply 恢復暫存的內容,但是恢復后,stash內容并不刪除,你需要用git stash drop來刪除。

  • git push origin master: 把本地的修改提交到遠程,origin 為遠程分支,master 為本地分支;

  • git pull: 從遠程拉去內容;

  • git tag: 給某次提交打一個標簽,比如給每一提交的版本打一個標簽,方便以后查找;

// 給當前提交的代碼打一個名字為 v0.1 的 tag,默認是打在最新一次提交的位置
$ git tag v0.1
// 查看所有的 tag
$ git tag
v0.1
v0.2
// 查看提交記錄
$ git log --pretty=oneline --abbrev-commit
48cd742 (HEAD -> master, tag: v0.2, tag: v0.1, orgin/master) chang lefe.js remot
8c2fd8e create lefe.js file
// 某一次提交版本后,忘記了打 tag,可以使用這個命令給某一次提交打 tag
$ git tag v0.01 8c2fd8e
// 提交tag的備注信息 -a:標簽名 -m:備注信息
$ git tag -a v0.3 -m '0.3 version release'
// 刪除標簽
$ git tag -d v0.2
Deleted tag 'v0.2' (was 48cd742)
// 把某個 tag 提交給遠程倉庫
$ git push orgin v0.1
// 提交所有的 tag 到遠程倉庫
$ git push orgin --tags
// push 這個tag不小心打錯了,并提交到了遠程倉庫,需要刪除,先刪除本地,在從遠程倉庫刪除
$ git tag -d push
$ git push orgin :refs/tags/push
  • git show: 顯示某個 tag 的詳細信息

$ git show v0.01
commit 8c2fd8ecec2f65f58ac1a531203ce520a78229d3 (tag: v0.01)
Author: wangsuyan 






Date:   Fri Nov 3 11:21:31 2017 +0800
    create lefe.js file
diff --git a/lefe.js b/lefe.js
new file mode 100644
index 0000000..37b455a
--- /dev/null
+++ b/lefe.js
@@ -0,0 +1 @@
+Hello lefe


  
  • 如何提交代碼到別人的倉庫中(以 Github 為例)

  • fork 別人的代碼到自己的賬號下,從自己的賬號下克隆剛才fork的項目,修改后提交到自己的代碼倉庫,如果需要提交給別人的代碼中,需要發起一個 pull request,別人同意后,你的代碼將出現在別人的倉庫中。

  • .gitignore:忽略要提交的文件

  • 如果某些文件不希望提交到倉庫中,可以使用 .gitignore 文件忽略它。 .gitignore

Git Flow

簡單介紹

Gitflow 是一個非常成功的分支模型,它主要分為2個(master, develop)主要的分支和3個(feature, release, hotfix)輔助分支。SourceTree 已經集成了它。它主要有以下幾個分支組成:

  • master

    生產環境分支,它是非常穩定的版本,一但處于develop分支的代碼沒問題以后,將會被合并到這個分支用來發布代碼。也就是說它處于隨時待命的狀態。

  • develop

    開發分支,最新的開發狀態,它是基于 master 分支的,一旦開發完畢后,將被合并(merge)到 master 分支上。

  • feature

    功能分支,它是基于 develop 分支的,一旦功能開發完成,將被合并(merge)到 develop 分支

  • release

    發布分支,它是基于 develop 分支的,主要用來修改 bug,修改完 bug 后將被合并到 develop 和 master 分支。主要是測試版本供測試人員測試。

  • hotfix

    補丁分支,基于 master 分支的,等不到新功能版本發布,必須發布一個布丁,bug 修復完成后將被合并到 master 分支,同時 hotfix 分支將被刪除。

使用

安裝參考 這里

  • 初始化 git flow init,這個命令主要創建了2個主要的分支(master 和 develop),當使用 git branch 查看時,發現它創建了 2 個分支,并把當前分支切換到了 develop 分支。

  • 假如想開發登錄模塊,使用$ git flow feature start login,主要創建并切換到 feature/login 分支,這時就可以在這個分支上開始工作了。當把登陸模塊完成后,使用 git flow feature finish login 結束任務,它主要把 feature/login 分支合并到了 develop 分支,并刪除了 feature/login 分支,同時切換到了 develop 分支。

  • 開發完成后需要發布版本,git flow release start 0.1.0 將創建并切換到 release/0.1.0 分支,如果中途有 bug 可以修改,修改完成后 git flow release finish '0.1.0 發布版本,這時將切換到主分支。

$ git flow release finish '0.1.0'
Switched to branch 'master'
Deleted branch release/0.1.0 (was c4958ec).
Summary of actions:
- Latest objects have been fetched from 'origin'
- Release branch has been merged into 'master'
- The release was tagged '0.1.0'
- Release branch has been back-merged into 'develop'
- Release branch 'release/0.1.0' has been deleted
  • 當有緊急 bug 需要處理時,使用 git flow hotfix start bugFix,這時將創建并切換到hotfix/bugFix分支,當修復完成后,使用 git flow hotfix finish bugFix 結束 bug 的修復。

$ git flow hotfix finish 'bugFix'
Summary of actions:
- Latest objects have been fetched from 'origin'
- Hotfix branch has been merged into 'master'
- The hotfix was tagged 'bugFix'
- Hotfix branch has been back-merged into 'develop'
- Hotfix branch 'hotfix/bugFix' has been deleted

注意 使用 Gitflow 并不會把代碼自動提交到遠程倉庫,需要自己收到提交。遠程倉庫只有master 和 develop 分支,feature,release 和 hotfix 分支并不提交到遠程倉庫,僅本地自己使用。

 

來自:http://www.cocoachina.com/ios/20171103/21043.html

 

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