上面連結點了會另開連結...
- 在欲版控的根目錄下,執行
git init
,再執行ls -al
會發現多了一個.git的隱藏檔案,所有在這個根目錄下的檔案更動都會紀錄在裡面。 - 用指令
git status
可以看到所在位置的目錄下,是否有檔案未被追蹤,可使用git add加到暫存區以進行追蹤。有任何資料異動,也會顯示在這裡
- $ git add 檔案名(想全存就使用".")
- $ git commit -m "這次commit的說明"(沒有-m就會掉進vim的深淵喔!)
$ git status
位於分支 human
尚未暫存以備提交的變更:
(使用 "git add/rm <檔案>..." 更新要提交的內容)
(使用 "git restore <檔案>..." 捨棄工作區的改動)
修改: djiwd.html
刪除: hello.html
未追蹤的檔案:
(使用 "git add <檔案>..." 以包含要提交的內容)
aaa.html
:::info
Git內建的編輯器-Vim,有兩個模式:
- Normal 模式(命令模式)-逃脫方法 離開 :q 存檔 :w 存檔後離開 :wq (冒號必打)
- Insert 模式(編輯模式)-逃脫方法 操作前要按i或o或a其中一個,按ESC鍵可以退到命令模式 :::
cd /
回到c槽(如果使用window要用cd /mnt/c/)cd -
回到上一次操作ctrl + W
一個字一個字刪除(空格到空格是一個字)ctrl + u
整行刪除ctrl + l
整個版面清理ctrl + r
尋找曾經下過的指令
cd /
回到c槽(如果使用window要用cd /mnt/c/)cd -
回到上一次操作git checkout -
更換head到上ㄧ次
$git commit -m "ccc" --allow-empty
允許註解空白- 快轉合併(fast-forward)
git checkout -
將HEAD回到上一個分支位置(兩個互換)
git branch
可以查詢目前分支
git branch -d
可以刪除分支/標籤
git branch -m
改分支/標籤名
git branch -f
可強制移動分支
git merge
(現在分支)(欲走到的分支位置)
- 留著也沒關係,因為只是一個標籤/貼紙,容量很小(幾kb=幾千byte),沒什麼實際的影響,不影響主枝幹。
- 刪除未合併分支,並沒有實際刪除,只是隱形。(git沒有刪除這回事)
使用代號的意思 通常用在重要的commit/里程碑
$ git tag 1.0.0 51d54ffc,其中1.0.0是自己設定的標籤
- 發生在合併之後
- 查看衝突的檔案,
$ git status
- 修改衝突的檔案(在文字編輯器裡,如vscode)
- 將修改後檔案加到暫存區,
$ git add xxxx.html
- 將修改後檔案加到儲存庫,
$ git commit -m "add xxxx"
$ git reflog
= ref+log,查看紀錄:檢視head的移動軌跡- 會移動head的操作
- checkout
- commit
- reset
- merge
- rebase跟merge的差異就是:
- rebase有點像身為HEAD的貼紙,去踩著另一個貼紙往上爬的感覺;
- 而merge則是再多開一個commit,把不是HEAD的那個節點加進來的感覺
- 操作練習
# use branch2 $ git checkout cat $ git rebase dog
:::info
注意:
如果使用是windows的同學,可能會有電腦解讀問題,說有沒有add的檔案而不讓你操作合併分支,可打以下指令解除:
$ git config core. filemode false
:::
- 同時搬移分支及HEAD,回到指定位置(代名詞)的狀態
- 使用參數
--mixed:預設值,丟回工作目錄 --soft:丟回暫存區 --hard:丟進垃圾桶
^ = caret 倒退一步 ~n = tilde 倒退n步 ex: head^^ = head~2
- 有兩個parent時: ^1:往1st parent移動 ^2:往2nd parent移動
- checkout 只移動head,但reset會移動head和分支
- $ git alias(別名)
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.st status
- tag:通常用在里程碑 標示階段
- 分支:通常用來區別功能
- tag和分支的差異:tag不能移動只能刪除,分支可以移動可以刪除。
$ git push origin master
(你不想用origin也可以用其他名稱,但自己要記得)
$ git push origin master:master
(前面的master代表你本機的貼紙;後面的master代表你上傳後想叫甚麼貼紙)
$ git push origin 1.0:abc
(這個表示你想要把標籤1.0的commit上傳而且貼紙名稱改成abc)
未來你也許會使用到的平台;他要求你一定要使用master貼紙
$ git push heroku master
$ git push heroku cat:master
- 如果你調皮本機不想要上傳master貼紙也沒關係,只要上傳cat貼紙時跟他說雲端要改用master貼紙喔,這樣這個平台也給過
$ echo "alias git='LANG=en_GB git'" >> ~/.zshrc
在終端機上輸入上列指令,然後重開就可以了。
$git config --global alias.co checkout
$git config --global alias.br branch
$git config --global alias.at status
以上是幾個簡單的縮寫替代,從此就靠co幫你checkout;st幫你status;br幫你branch
- HackMD:台灣新創,使用markdown語法,也可用html標籤(部分?)
- markdown語法參考(Astrocamp粉專)