當咱們新接手一個項目時,首先要作的就是要從遠端倉庫拉取項目代碼。html
git clone ***** (* 爲遠程倉庫地址)
複製代碼
以上是已有遠程倉庫時的作法,但是若是是一個全新的項目,尚未遠程代碼倉庫,那麼咱們就須要先新建一個遠程倉庫,而後經過 git clone
命令來拉取項目代碼。
你也能夠先在本地初始化項目,而後關聯到遠程倉庫:git
git init # 初始化本地的倉庫,會生成.git文件
git add . # 把全部改動添加到暫存區
git commit -m "first commit" # 編寫 commit 信息
git remote add origin https://github.com/wumouren/git-demo.git # 關聯本地倉庫到遠程
git push -u origin master # 推送本地更新到遠程倉庫,並設置默認推送路徑
複製代碼
如圖:github
一、初始化本地倉庫bash
二、建立遠程倉庫,獲取遠程倉庫地址yii
三、新增本地文件,添加到暫存區,並編寫 commit 信息,提交本地更新svn
四、關聯本地倉庫到遠程倉庫,並設置默認推送路徑,推送本地更新到遠端工具
通過上述步驟,咱們再次打開遠程倉庫,發現本地更新已經成功推送到了遠程倉庫:ui
咱們用寄快遞來類比下 git 提交的過程:spa
git add . # 添加修改到暫存區 --> 相似與咱們把須要寄出的快遞挑揀出來
git commit -m '描述' # 編寫 commit 信息 --> 至關於咱們把快遞打包,並填寫快遞單
git push # 推送本地更新到遠程倉庫 --> 至關於咱們寄出快遞
複製代碼
以上,咱們簡單的過了一遍 git 的使用流程,關於所用到的一些命令,在下邊咱們再來繼續探討。命令行
當咱們在本地進行需求開發時, git 總能追蹤的代碼的改變,咱們能夠經過 git status
來查看:
當咱們修改 a.js
的內容,並新增 b.js
後,經過 git status
咱們看到,控制檯已經清晰的告訴咱們,如今本地倉庫有了哪些改變 。 咱們能夠經過 git add
來添加修改到暫存區。以後,咱們再用 git status
來看下文件狀態:
咱們看到,經過 git add
把修改內容添加到暫存區後,全部的修改都變成了綠色,控制檯提示信息也發生了改變。
關於 git add
的參數:這裏有更多用法
git add <path>(可寫多個) # 提交指定文件改動到暫存區
git add . # 提交全部被刪除、被替換、被修改和新增的文件改動到數據暫存區等同於 git add -A
# 另:一些博文中說 git add . 只提交全部修改的和新建的文件改動到暫存區--即刪除的文件不會被添加,可我實驗屢次,發現並非這樣,猜想和 git 版本有關,個人版本 2.15.2
git add -u <===> git add –update # 提交全部被刪除和修改的文件改動到數據暫存區(即新增的文件不會被添加)
git add -A <===> git add –all # 提交全部被刪除、被替換、被修改和新增的文件改動到數據暫存區(綜合了 git add . 和 git add -u)
複製代碼
當咱們修改了多個文件後,想提交代碼,可裏邊恰恰又有一個文件改動咱們不想提交,這時咱們須要用到另外一個命令:
git reset 文件路徑(可寫多個)
複製代碼
如圖:
上圖中,咱們新增了三個文件改動,而後經過 git add
把文件改動提交到暫存區,但是咱們忽然又以爲有些文件改動咱們還不想提交,全部又經過git reset
命令撤銷了相關提交。
以上操做僅作相關命令的演示,在實際的開發中,還望你們靈活使用。
咱們把改動添加到暫存區後,下一步就是要 commit(相似與挑揀完須要快遞的東西后,要進行打包填寫快遞單)。 咱們能夠每一次 commit 後都進行 push 操做,也能夠屢次 commit 後,再進行 push 操做。咱們能夠 git log
來查看 commit 記錄:
如圖,咱們經過三次 commit 分別提交了 a.js 、 b.js 、 c.js。 而後經過 git log
查看,能夠清晰的看到咱們三次 commit 分別的 commit 描述信息。(能夠經過連續兩個大寫的 Z 來退出 git log
)
若是咱們忽然想修改最後一次 commit 的描述信息,那麼咱們將會用到一個新的命令參數 git commit --amend
:
當咱們輸入git commit --amend
後,點擊會車,咱們會進入一個編輯頁面。
在這個頁面中咱們能夠修改 commit 描述信息,而後保存、退出。
具體操做爲:
點擊 i 建,進入插入模式,開始編輯信息。
完成後 按 esc 鍵,退出編輯模式。
而後輸入英文 :wq! 保存退出
# 不熟悉命令行操做的同窗,請自行研究
複製代碼
修改完 commit 信息後,咱們再次經過git log
命令來查看 commit 記錄:
假定咱們想修改的描述信息不是最後一次 commit 的 d.js ,而是 b.js ,那麼,咱們將會用到另外一個命令 git rabase -i
:
咱們將 b.js 前的 pick 標識修改成 edit:
回車後咱們發現分支已經不在 master 上了:
咱們再次輸入 git log
命令,能夠看到,最近一次的 commit 已經變成了 b.js :
咱們重複修改 d.js 的操做,以後根據命令行提示的信息,咱們輸入git rebase --continue
命令:
咱們再次打印 commit 記錄,能夠看到,b.js 成功被修改:
# 以上只是其中一種方法,其餘方法請自行研究。
複製代碼
git pull
用於從遠端倉庫獲取最新代碼。
依舊用寄快遞來類比,當咱們將快遞打包好並填好快遞單後,在往寄存櫃中存放以前,先要知道那些格子是被放過東西的,那些是尚未放東西的,咱們的快遞只能放在尚未放東西的格子中!
git pull
命令就能夠看做是更新了最新的儲物格信息。
假定,你想把快遞放在第一排第一列,若是這個儲物格是空的,天然能夠放進去。但是,若是這個儲物格已經放過了東西,你還想往裏放,這樣,就產生了衝突。git 中的衝突,大體也是這麼個意思。
假定咱們的同事小A,在和你協做開發,他也修改了 a.js 文件,而後提交了代碼,這樣在你進行 git push
時,便會產生衝突。
# 左側是咱們正在編輯的 a.js ,右側是 小A 的修改的 a.js
複製代碼
咱們看到,兩人在開發的時候都修改了相同位置的代碼,而後小A開發完後,進行了提交:
而後咱們再來提交本身的代碼:
很明顯,在代碼中產生了衝突。這時,咱們就要和小A來交流,來解決衝突。
和小A交流後,咱們決定保留雙方的代碼,本身就刪除了代碼中那些奇奇怪怪的 hash ,從新進行了一次提交:
這樣,一次簡單的衝突就解決了。
當咱們 push 完成後,遠程倉庫的代碼已經再次發生了改變,小A忽然想起來還有一個需求要修改,但是在修改前卻忘記了更新本地代碼,因而在完成修改以後,發現直接 push 時報了錯:
控制檯提示咱們在 push 以前要先 pull ,咱們按照提示輸入 pull 命令:
控制檯中又出現了那個咱們熟悉的 commit 信息編輯界面:
咱們保存退出後,從新 push ,就能夠了。
注意的地方
以上,簡單說了兩個常見的衝突,固然在實際開發中,還會出現各類奇奇怪怪的問題。
在有問題時,咱們不要慌(以前我會很慌,不知道該怎麼辦,瞬間手忙腳亂)應該多留意控制檯信息,而後查找解決辦法。
在提交代碼前必定要先 pull ,把本地代碼更新到最新,而後再 push , 這樣作能夠避免覆蓋別人的代碼。
複製代碼
在項目的開發中,經常會須要有多個分支。咱們能夠經過git branch命令來新建分支:
git branch # 查看分支
git branch 分支名 # 新建分支
git checkout 分支名 # 切換分支
複製代碼
如圖:
咱們在 2018 分支上再作些修改,並提交代碼:
經過 git log
咱們看到,新提交的 2018 已經存在提交記錄裏了:
咱們再切換到 master 分支,發現,信息爲 2018 的提交記錄並不存在,相應的改動固然也不存在:
這時咱們就須要合併分支,把 2018 分支上的改動合併到 master 分支上,咱們須要用到一個新的命令:git merge
。
咱們切換到 master 分支上,而後輸入git merge
,如圖:
咱們看到,在 2018 分支上的改動,已經出如今 master 分支上了。
本文旨在梳理 git 使用的基本知識,對於一些命令的使用和描述並不全面,更多高級的用法,還望各位自行研究,這裏不作贅述。 以上,若有描述不正確的地方,還望批評指正!