使用 github 做程式碼管理,知道這些就夠了

風的姿態發表於2018-03-09

只要掌握了下面的常用命令,基本上用使用 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(+)

公眾號:古時的風箏
掃碼關注

相關文章