Tuesday, January 24, 2017

git pull

現在我開兩個git bash還有my 跟A資料夾在本地數據庫代表我跟A同事,我在兩個資料夾分別下載空的數據庫(同一個)。
假設我開發好了網頁,上傳到github我可以用通訊軟體告訴同事A我開發好了哪些部分,你可以繼續新增其他功能它就可以git pull來更新工作目錄。

記得上傳指令git push   [預設遠端主機名稱][分支名稱]

還有其他情況,例如我沒通知A同事我有開發好網頁上傳到github,他就繼續開發上傳後發生衝突,這時候就git pull下來沒有衝突的話會自動合併

git如何推送分支到遠端數據庫

git remote 查詢遠端數據庫
git remote rename 原名稱 修改名稱
git push origin master
             [預設遠端主機名稱][分支名稱]

git stash

假設你在開發網頁有一個分支issue但不那麼重要,所以你跑去master繼續開發打到一半你的老闆跟你說issue比較重要先去改,但你改到一半不想建立commit可以使用git stash來暫存

  1. git stash  暫時儲存當前目錄
  2. git stash list 瀏覽 git stash 列表
  3. git stash pop還原暫存
  4. git stash drop  清除最新暫存
  5. git stash clear  清除全部暫存


git tag標籤

簡單來說就是幫你的commit加入標籤,在建立commit 點後可以輸入git tag 標籤名稱 or git tag -am "備註內容" 標籤名稱

  1. 查詢標籤 : git tag
  2. 查詢詳細標籤: git tag -n
  3. 刪除標籤 : git tag -d 標籤名稱
  4. 新增輕量標籤: git tag 標籤名稱
  5. 新增標示標籤: git tag -am "備註內容" 標籤名稱
  6. 切換到標籤的commit : git checkout 標籤名稱

Monday, January 23, 2017

git merge解決衝突

假設在feature1修改index.html加入css跟h1,在修改期間其他在master也新增h1這樣發生衝突如下圖
這時候就看你要砍掉還是都保留,手動建立一個commit因為沒辦法自動合併

git merge(2)

有時候不只一位開發者,有很多位,這時候假設你在feature1上開發css,其他使用者已經更新master如下圖
這時候就切回master進行合併如下圖。

git merge(1)

建立兩個commit點假設第一個點空的,第二個寫了code,想加入一個功能所以建立分支feature1
切換到feature1分支開始新增功能,新增好後大家也都看過確認沒問題建立commit點,然後切回master回去看index.html程式碼回還原,因為還沒跟feature1進行合併。
確定回到master後輸入git merge feature1就變成下圖。

Git 創建新分支

為什麼要做到多個分支,原理在不希望目前上線的版本的master被人家亂改,或其他開發者做了commit沒有給其他人確認,這樣當然希望其他開發者在分支上完成,大家也多看過了再合併到master


創建新的分支

git branch 分支名稱

現在在終端機輸入git branch feature1
再輸入git branch 會發現有兩個分支master,feature1
接這要切換到feature1分支
輸入git checkout feature1
下在我改任何東西都不用怕改壞掉,因為分支在feature1上,現在我對index.html進行修改,分支圖如下
之後回去看master再回到feature1就會發現你對index.html修改了些什麼


Git branch分支

如果今天跟其他公司的團隊成員協同合作一定要有分支的觀念。


淡藍色點為commit的點,有時候只是單純想修改一些bug,在修改途中會一直重新整理、上傳過程中可能改壞了,總不能讓其他人可到你壞掉的版本,所以這時候就需要開分支,以上圖來說就是在黃球部分開發確認後合併到淡藍色的commit點。

HEAD : 目前所在位置指標
git branch : 瀏覽目前分支
git checkout 前4碼
git checkout master 復原

假設我們現在在淡藍色0.2想回去看淡藍色0.1
終端機輸入git log 可以調查淡藍色0.1的前4碼
git checkout 前4碼移至淡藍色0.1

A successful Git branching model:
http://nvie.com/posts/a-successful-git-branching-model/

Git push推送數據庫至github

之前我們都在本地數據庫做事情,現在要把它上傳到github先註冊一組帳號

新增遠端數據庫這樣就可以下載修改上傳

現在我們在github新增一個Repository 名稱叫做gittest,在工作目錄下下在它
輸入git clone 網址,他告訴你是空的Repository,在工作資料夾會出現gittest的資料夾裡面只有一個.git隱藏檔

現在我們拉一個遠端數據庫下來了,進入gittest資料夾可以新增檔案、圖片、程式等等再把它上傳

現在我們建立一個commit點

  1. touch index.html
  2. git add .
  3. git commit -m "updata index"

現在準備上傳到遠端數據庫會用到push這個指令 
輸入git push 他會要求你打github的帳密
再新增檔案上傳上去,在去github上觀看會發現commit有2次
有的話恭喜你完成上面的流程圖了

  1. 下載遠端數據庫
  2. 在本地修改、新增檔案
  3. push到github

Sunday, January 22, 2017

指令大全


基礎設定




查詢版本

git version



查詢設定列表

git config --list



輸入姓名

git config --global user.name "你的名字"



輸入email

git config --global user.email "你的email"

新增本地/遠端數據庫




在本地資料夾新增數據庫

git init



複製遠端數據庫

git clone 遠端數據庫網址

增加/刪除檔案




增加檔案進入索引

git add 檔案名稱



增加全部檔案進入索引

git add .



查詢狀態

git status



顯示歷史紀錄

git log



將索引提交到數據庫

git commit -m '更新訊息'

還原指令




還原工作目錄與索引,會跟最後一次 commit 保持一樣

git reset --hard



全部檔案取消索引

git reset HEAD



單一檔案取消索引

git reset HEAD 檔案名稱



恢復單一檔案到最新 commit 狀態

git checkout 檔案名稱



刪除最近一次 commit

git reset --hard "HEAD^"



上面語法如果刪除錯了可以再用此語法還原

git reset --hard ORIG_HEAD



刪除最近一次 commit,但保留異動內容

git reset --soft "HEAD^"



commit 後發現有幾個檔案忘了加入進去,想要補內容進去時

git commit --amend

分支




顯示所有本地分支

git branch



新增分支

git bracnch 分支名稱



切換分支

git checkout 分支名稱



合併指定分支到目前的分支

git merge 分支名稱



刪除分支

git branch -d 分支名稱

遠端數據庫操作




複製遠端數據庫

git clone 遠端數據庫網址



查詢遠端數據庫

git remote



將本地分支推送到遠端分支

git push 遠端數據庫名稱 遠端分支名稱



將遠端分支拉下來與本地分支進行合併

git pull

標籤




查詢標籤

git tag



查詢詳細標籤

git tag n



刪除標籤

git tag -d 標籤名稱



新增輕量標籤

git tag 標籤名稱



新增標示標籤

git tag -am "備註內容" 標籤名稱

暫存




暫時儲存當前目錄

git stash



瀏覽 stash 列表

git stash list



還原暫存

git stash pop



清除最新暫存

git stash drop



清除全部暫存

git stash clear



Git工作狀態還原

重新建立工作目錄git init 
建立index.html
git add .
git commit -m "add index.html"
git log 

會發現已經建立一個commit 紀錄點

我新建all.css ,all.js把她加入git add . 這樣這些檔案就會準備提交了,但是如果突然不想提交或想在修改可以輸入git reset HEAD就可以取消索引。

如果今天我只想取消一隻檔案呢?
輸入git reset HEAD 檔案名稱

現在我修改index.html並查看狀態
假設我現在發現我把檔案寫壞了
輸入git checkout 檔案名稱就會還原到最新一版的commit紀錄

最後一個大絕招工作目錄與索引通通還原到最後一次commit的紀錄,輸入git reset --hard,會發現工作目錄剩下最一開始建立commit

使用.gitignore忽略檔案

有時候有些檔案想忽略不想上傳,例如寫c/c++的 .o檔,這時候就在工作目錄下新增.gitignore來忽略檔案

以上述例子來說
我想忽略所有.html還有css資料夾的檔案我可以修改.gitignore文件如下


*.html
css/
下列這個網址提供一些gitignore可以知道什麼東西可以不用進版控:
https://github.com/github/gitignore

工作目錄、加入索引、提交版本流程介紹


  1. 工作目錄下可以新增檔案、新增資料夾、修改程式碼
    1. 新增html
    2. 新增css資料夾
    3. 修改程式碼
  2. 把工作目錄所做的東西加入索引git add .
  3. 確認索引沒問題加入commit紀錄 git commit -m "修改紀錄"


範例我在工作目錄新增

  1. index.html
  2. a.txt
  3. 新增css資料夾
  4. css資料夾下建立all.css

假設我要把上述在工作目錄所做的事情變成一個commit git bash 輸入git add .想確認是否成功
可以輸入git status來檢查狀態

如果又新增b.txt沒有git add .會發生什麼事呢?
在把b.txt加入到工作目錄 git add b.txt,之後建立commit 在 git bash 輸入git commit -m "updata1"

之後我們在git status 會發現他跟你說沒有任何更新資料,為什麼呢?剛剛不是有4個檔案?因為已經我們把這4個 資料更新為一個版本,儲存為一個commit 紀錄 

我去index.html新增程式碼

<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<h1>test</h1>
</body>
</html>

之後再新增index2.html 然後輸入git status 你會發現 ,你有修改檔案,還有一個未追蹤的檔案
現在把所有檔案加進去git add .
我想把它變成一個更新版本紀錄輸入git commit -m "修改程式碼",這樣已經更新成第二個版本,可以輸入git log 查看紀錄,會發現有2次紀錄


安裝數據庫

1.建立本地數據庫用來記錄各種程式碼的版本
2.新增資料夾(Local Repository)在終端機上輸入git init
3.終端機會出現master代表進入本地數據庫
4.新增的 資料夾會出現一個隱藏檔.git資料夾
5.可以輸入 ls -al 可以看到

.git 資料夾的東西不要隨意更改他記錄檔案變更、上傳記錄用特殊格式儲存在本地數據庫

設定Git

作者是誰?郵件是多少?
這樣每個跟新點都找的到修改的人

在git-bash輸入下列指令
git config --global user.email "XXX@gmail.com"
git config --global user.name "XXX"
git config --list

Windows安裝Git

1.下列網址會依照你的作業系統下載安裝檔
https://git-scm.com/

2.安裝完成後可以在資料夾中發現git-bash就是我們要用的終端機
3.要判斷安裝是否完成可在終端機輸入 git version
4.開新檔案與展開列表在 git bash 上都可以執行,但是在 windows 預設的 命令提示字元沒辦法使用,所以還請學生一律都使用 git bash 來進行操作
1.移動路徑:cd 路徑 
2.回上一層:cd ..       PS:是兩個.. 不是一個 . 
3.展開列表:ls 
4.開新資料夾: mkdir 資料夾名稱 
5.開新檔案: touch 檔案名稱