http://marklodato.github.io/visual-git-guide/index-en.html
https://ihower.tw/blog/archives/2620
只想自己玩
創造一個repository (大陸名版本库)
$ git init
Initialized empty Git repository in /Users/grace/gracegit/.git/
新增改動部分到暫存區 (Stage) 裡面 (p.s. 改動部分包括了新增檔案/改動檔案/刪除檔案)
$ git add [file]
提交所有暫存區內的改動到版本庫 (repository)
$ git commit [參數: -m/-a/...]
檢查工作區內更動狀況, 暫存區內容
$ git status
還原工作區內的改動
$ git checkout -- [file]
抽掉暫存區內的某檔案改動 (p.s. 搭配--hard --soft 有其他效果)
$ git reset HEAD [file]
想跟別人玩
參考 http://goo.gl/rWB8FA
方法A. 克隆一個別人的版本庫
$ git clone git@github.com:grace/gits.git
克隆指令預設情況下會自動設定本地端的 master 分支追蹤被複製的遠端版本庫的 master 分支。(假設該版本庫有 master 分支)
$ git clone git@github.com:grace/gits.git
克隆指令預設情況下會自動設定本地端的 master 分支追蹤被複製的遠端版本庫的 master 分支。(假設該版本庫有 master 分支)
克隆指令預設情況下將遠端版本庫命名為 origin
方法B. 設定連結指向遠端別人的版本庫
$ git remote add [shortname] [url]
Ex.
$ git remote add grace git://github.com/grace/grace.git
連絡遠端版本庫, 將尚未擁有的新資料下載回來 (p.s. 僅是下載回來; 並未自動合併)
$ git fetch [remote-name]
如果當下分支正在追蹤遠端的分支, 可用此指令同時下載並自動合併
$ git pull
上傳自己的東西到遠端版本庫
$ git push [remote-name] [branch-name]
Ex.
$ git push origin master
再提醒一次, origin是系統預設的名字, 通常都是連到某個遠端版本庫
如果伺服器有開放寫入權限, 且沒有別人在上傳, 那麼你的master這樣就被你上傳出去了
如果伺服器有開放寫入權限, 且沒有別人在上傳, 那麼你的master這樣就被你上傳出去了
上傳自己本地端的XXX branch到遠端版本庫
$git push -u origin HEAD
HEAD用過的人都說成功,換成某特定branch name時,有些人會失敗
以上藏了一個大魔王 : git checkout
後面其實可以接branch; tag; file; directory
用法雖然大同小異 但各自管轄不同對象 不可同日而語 ; 碰到一個再學一個吧 !
git reset 之後如何回到未來
當可以fast-forwarded時
使用 git pull master(或特定branch)
或 git merge --ff-only 特定branch # 限定只作fast-forwarded
fast-forward 在 Git 是一種 merge 術語,當 B branch (例如一個 local branch) 是從 A branch (例如一個 remote branch) 的最新版(HEAD)分支出來的,那當 A 要把 B merge 進來時,因為 B 的 parent commit 是 A 的 HEAD,所以這兩個 branch 唯一的差異就是 B 後來的 commit 而已,而不會有任何 conflict。所以實際上的動作只要把 A 的 HEAD 改成 B 的 HEAD 就好了,線圖上這兩個 branch 根本是同一條線,此謂 fast-forward。
沒有留言:
張貼留言