2015年6月28日 星期日

Git指令

Git為分散式版本控制系統。

基本流程:

1. Get Git
Mac: $ brew install git 
http://brew.sh/
2. Basic setting
  1. $ git config --global user.name "..."
    $ git config --global user.email ....@....com
    $ vim ~/.gitconfig
3. Create a repository



$ git init "repository" //如果沒有在init 後面加folder的名字會把當下的folder變成repository
$ git add "file" or $git add . //把修改的file丟到暫存器中
$ git commit -m "..." //把修改的file送出
or
$ mkdir sandbox
$ cd sandbox
$ git init

常用的指令

$ git status
$ git diff
$ git log  //看下過的commit
$ git tag "tag name" //幫一長串的commit改ID
$ git checkout "commit" //變回"commit(一串id)" or Head
$ git rm "..." //刪除"..."
$ git mv "..." //移動檔案

$ git reset "..." //reset Head to "..." $ git revert "..."
git stash //把目前工作區的東西丟到暫存區裡,等之後在回來拿他 git stash list //列出所有暫存區的資料 git stash pop //取出最新的一筆, 並移除. git stash apply //取出最新的一筆 stash 暫存資料. 但是 stash 資料不移除 git stash clear //把 stash 都清掉


Branch

何時開 Branch ?
1. Topic feature 開發新功能
2. Bug fixes
3. 任何實驗
origin(remote) 是 Repository 的版本,master(branch) 是 local 端, 正在修改的版本.
螢幕快照 2015-06-13 下午3.53.40.png



$ git checkout -b featuretest //把新建的分支取名為featuretest,並移動到分支上
or
$ git branch featuretest
$ git checkout featuretest //以上功能一樣

$ git branch -d "branch name" //刪除
$ git branch //列出所有的branch
$ git branch -v //查看各個分支最後一個提交物件的資訊
$ git branch --merged //哪些分支是當前分支的直接上游

git fetch origin //抓取 / 切換 Repository 的 branch
git checkout --track -b reps-branch origin/reps-branch //抓取 reps-branch, 並將此 branch 建立於 local 的 reps-branch

MERGE & REBASE

merge概念:會把兩個分支最新的快照(C3 和 C4)以及二者最新的共同祖先(C2)進行三方合併,合併的結果是產生一個新的提交物件(C5)
螢幕快照 2015-06-13 下午9.45.51.png



**Merge a branch back.**
//回到 master 分支,利用 git merge 命令指定要合併進來的分支
$ git checkout master
$ git merge "branch"
rebase概念請參考:https://git-scm.com/book/zh-tw/v1/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E8%A1%8D%E5%90%88

雖然最後整合得到的結果跟merge沒有區別,但rebase能產生一個更為整潔的提交歷史。如果視察一個rebase過的分支的歷史記錄,看起來會更清楚:仿佛所有修改都是在一條線上先後進行的,儘管實際上它們原本是同時並行發生。一般我們使用rebase的目的,是想要得到一個能在遠端分支上乾淨應用的補丁.

REMOTE REPOSITORY

git另一個很重要的功能就是與遠端協同工作,



$ git remote add remote名稱 remote網址 加入一個 remote repository,例如 git remote add github git://github.com/gogojimmy/test.git

$ git push remote名稱 :branch名稱 刪除遠端 branch,例如 git push origin :somebranch。

$ git pull remote名稱 branch名稱 下載一個遠端的 branch 並合併(注意是下載遠端的 branch 合併到目前本地端所在的 branch),實際作用是先 git fetch 遠端的 branch,然後與本地端的 branch 做 merge,產生一個 merge commit 節點。

$ git fetch [remote-name] //從遠端儲存庫擷取或合併
$ git clone [url]  //git clone,會建立你自己的本地分支 master 和遠端分支 origin/master,並且將它們都指向 origin 上的 master 分支。 
ex. $ git clone git://github.com/schacon/grit.git “mygrit” //mygrit可有可無 

$ git remote -v  //在名稱後方顯示其URL
origin  git://github.com/schacon/ticgit.git (fetch)
origin  git://github.com/schacon/ticgit.git (push)
螢幕快照 2015-06-13 下午10.46.06.png如果你在本地 master 分支做了些改動,與此同時,其他人向 git.ourcompany.com 推送了他們的更新,那麼伺服器上的 master 分支就會向前推進,而於此同時,你在本地的提交歷史正朝向不同方向發展。不過只要你不和伺服器通訊,你的 origin/master 指標仍然保持原位不會移動.git fetch origin來同步遠端伺服器上的資料到本地。
螢幕快照 2015-06-13 下午10.43.18.png



$ git push origin serverfix //推送本地分支上傳到遠端儲存庫,"git push (遠端倉庫名) (分支名)"
$ git push origin :serverfix //刪除遠端分支
$ git remote show origin  //監看遠端儲存庫


上傳到GitHub

  1. 到 github.com 點選“new repository”
  2. 名字取好 按 "Create repository"
  3. 到新增的 repo 頁面 copy ssh 格子裡面的內容
  4. 回到 Terminal ,到要上傳 repo 的資料夾,輸入`$ git remote add origin git@github.com:XXXXXXXXX (copy的內容)
  5. 上傳 $ git push -u origin master 以後直接打 $ git push 即可( -u 是設為預設的意思)
  6. 上傳別的分支的方法 $ git push origin (分支的名字) EX: $ git push origin development 上傳 development這個分支
Clone(複製) repository 的方法
到 github專案頁面 copy 右下角的 SSH clone url



$ git clone (你複製的url)
把專案回溯到在 github 裡面的版本


$ git pull origin master 或簡寫 $ git pull

協作GitHub上別人的專案




1. 到該專案的 github 頁面,點選右上角的『 Fork 』按鈕,該專案就會出現在你帳號的專案庫裡面.
2. clone 自己的專案,EX. `clone git@github.com:sdlong/groupme.git`
3. 在命令行執行 git branch develop 來建立一個新分支
4. 執行 git checkout develop 來切換到新分支
5. 執行 git remote add upstream https://github.com/user/projectname 把我的庫新增為遠端庫
6. 執行 git remote update更新
7. 執行 git fetch upstream master 拉取我的庫的更新到本地
8. 執行 git rebase upstream/master 將我的更新合並到你的分支
這是一個初始化流程,只需要做一遍就行,之後請一直在 develop 分支進行修改。
如果修改過程中我的庫有了更新,請重復 6、7、8 步。
修改之後,首先 push 到你的庫,然後登錄 GitHub,在你的 repo 的首頁可以看到一個 pull request 按鈕,點擊它,填寫一些說明資訊,然後提交即可。

沒有留言:

張貼留言