Git為分散式版本控制系統。
Mac: $ brew install git
http://brew.sh/
2. Basic setting
$ 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 端, 正在修改的版本.
$ 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)
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)

如果你在本地 master 分支做了些改動,與此同時,其他人向 git.ourcompany.com 推送了他們的更新,那麼伺服器上的 master 分支就會向前推進,而於此同時,你在本地的提交歷史正朝向不同方向發展。不過只要你不和伺服器通訊,你的 origin/master 指標仍然保持原位不會移動.git fetch origin來同步遠端伺服器上的資料到本地。

$ git push origin serverfix //推送本地分支上傳到遠端儲存庫,"git push (遠端倉庫名) (分支名)"
$ git push origin :serverfix //刪除遠端分支
$ git remote show origin //監看遠端儲存庫
上傳到GitHub
- 到 github.com 點選“new repository”
- 名字取好 按 "Create repository"
- 到新增的 repo 頁面 copy ssh 格子裡面的內容
- 回到 Terminal ,到要上傳 repo 的資料夾,輸入`$ git remote add origin git@github.com:XXXXXXXXX (copy的內容)
- 上傳 $ git push -u origin master 以後直接打 $ git push 即可( -u 是設為預設的意思)
- 上傳別的分支的方法 $ git push origin (分支的名字) EX: $ git push origin development 上傳 development這個分支
Clone(複製) repository 的方法
到 github專案頁面 copy 右下角的 SSH 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 按鈕,點擊它,填寫一些說明資訊,然後提交即可。
沒有留言:
張貼留言