只要掌握了下面的常用命令,基本上用使用 github 就沒有問題。github 有兩種認證方式,一種是通過 ssh 私鑰的方式,一種通過 https 的賬號名和密碼。ssh 方式需要建立本地祕鑰並且新增到個github 上,操作起來略顯麻煩,本篇完全介紹以 https 方式管理。
主要原理說明
git 的管理依賴於在你本地倉庫的目錄中存在一個 .git
目錄的,裡面有 config、HEAD 等檔案。
HEAD 裡面是標識當前所在的分支,內容如下,表示當前在 dev 分支下,之後的拉取和推送都是在 dev 分支下完成:
ref: refs/heads/dev
config 裡配置一些引數,如倉庫地址、remote 等
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = https://username:password@github.com/huzhicheng/test__11.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
其中,url 引數是重點,表示遠端倉庫地址,正常的遠端倉庫格式為https://github.com/huzhicheng/test__11.git
,而這裡,並且包括下面用到的都是 https://username:password@github.com/huzhicheng/test__11.git
這種格式。其中username 表示 github 賬號,後面冒號分隔,接一個密碼,也就是 github 密碼,然後用 @ 符號連線上遠端倉庫。
用 https 方式連線 github 專案就是這麼簡單。
##初始化本地倉庫
假設我們要在 github 上維護一個專案。首先,要登入 github 賬號,點選 “New repository”,輸入專案名稱,即可成功建立專案倉庫,之後會提示如下內容:
echo "# 初始化倉庫" >> README.md
git init
git add README.md
git commit -m "first commit"
做上面這些操作之前,我們需要在機器上建立一個空白目錄,然後進入這個目錄進行操作。
第一行,是說新建一個 README.md 檔案,並且寫上你自定義的內容;
第二行,通過 git init
命令做本地倉庫的初始化;
第三行,將 README.md 新增到暫存區;
第四行,提交暫存區並寫好註釋說明。
本地倉庫和遠端倉庫建立聯絡
本地建立完倉庫後,需要把本地倉庫和遠端倉庫建立聯絡,這樣之後才能推送檔案到遠端倉庫。
git remote add origin https://username:password@github.com/huzhicheng/test__11.git
移除本地倉庫和遠端倉庫的關聯
如果遠端倉庫作廢或者新增了錯誤的遠端倉庫地址,可以用下面的命令移除掉。注意 origin 後面的內容需要和關聯遠端倉庫時填寫的內容一致才可以。
git remote rm origin https://username:password@github.com/huzhicheng/test__11.git
首次提交
git push -u origin master
推送本地修改到遠端
推送前一定要先拉取最新程式碼,並且每次修改前及時拉取最新程式碼是非常好的習慣。
//拉取最新程式碼
git pull origin master
//檢視本地倉庫狀態
git status
// 將所有修改更新至暫存區
git add .
// 提交暫存區更改 並寫上明確的註釋說明
git commit -m "註釋內容"
// 提交修改至主分支
git push origin master
以上操作就可以完成從倉庫初始化到檔案提交的完整過程了。
那如果是參與已經存在的專案呢,遠端倉庫已經存在並且已有專案檔案在了,下面介紹如何參與已有專案。
將遠端倉庫同步到本地
首先需要 clone 遠端倉庫到本地,然後拉取新程式碼就可以了,就是這麼簡單。
git clone https://username:password@github.com/username/xxxxxx.git
git remote -v 可以檢視遠端倉庫版本
git fetch origin master 拉取遠端倉庫更新
強制覆蓋本地檔案
有時候臨時在本地倉庫做了修改,但是不想保留,再拉取更新的時候要強制覆蓋本地檔案,可以用如下命令。
git fetch --all
git reset --hard origin/master
git pull
解決衝突
有時候我們可能和別人同時修改了某一個檔案,提交的時候發現檔案已經被別人修改,並且提交了。這時,如果我們再提交檔案的話會出現如下錯誤:
To https://github.com/huzhicheng/test__11.git
! [rejected] dev -> dev (fetch first)
error: failed to push some refs to 'https://github.com/huzhicheng/test__11.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
按照提示,我們嘗試 git pull origin dev 獲取最新版本,通常又會出現如下問題:
From https://github.com/huzhicheng/test__11
* branch dev -> FETCH_HEAD
e6bb7ea..c04d142 dev -> origin/dev
Auto-merging dev.md
CONFLICT (content): Merge conflict in dev.md
Automatic merge failed; fix conflicts and then commit the result.
意思是說,獲取新版本嘗試自動合併,但是合併失敗,請修復衝突並提交。
這時我們開啟衝突的檔案,會看到有 <<<<<<< HEAD
、=======
、>>>>>>>
這些符號,留下要合併的最後內容。然後再執行命令:
git add -u
git commit -m "解決衝突"
git pull origin dev
git push origin dev
建立並切換到新分支
如果專案中存在多個分支,例如主分支和開發分支,我們在本地建立同樣的分支結構使用如下命令,建立 dev 分支,並且切換到 dev 分支 。
// 建立分支並且切換到這個分支下
git checkout -b dev
// 切換到某分支
git checkout dev
git checkout master
檢視所在分支
其中前面帶 * 號的為當前所在的分支。
$ git branch
* dev
master
分支合併
我們之前假設已經在 dev 分支上做了一些修改,可以釋出版本之後,想要合併到 master 分支上。
首先使用 git checkout master 切換到 master 分支,然後執行 git merge dev 命令進行 dev 分支到 master 分支的合併。
$ git merge dev
Updating 1dd1bb5..5fe81cd
Fast-forward
dev.md | 6 ++++++
1 file changed, 6 insertions(+)
公眾號:古時的風箏