2013年1月30日 星期三

[GIT] 基本指令

#顯示目前索引有哪些檔案
#通常用在 , 如果不小心add或是要將已commit過的檔案從索引中移除而又不想要刪除檔案(也就是檔案仍存在)時使用
#顯示 sha1碼 , 及檔名
git ls-files --stage


#將t2.php從索引中移除
#通常與 git ls-files --stage 一起使用 , 先查詢要移除的檔案是否在索引中 , 再使用 git rm --cached t2.php 來移除
#並不會將檔案移除 , 只會將檔案從索引中移除
git rm --cached t2.php

#刪除repo,遞迴跟強制不詢問是否刪除。
$ rm -rf .git

#是看git 的commit線圖,要另外安裝
$ tig


init
#架一個server,本身不編輯檔案。如果架好了可以使用 git clone git@localhost:~/path   下載
$ git init --bare 



clone
git clone https://jexlin@bitbucket.org/jexlin/jexpoyi.git test
* 下載git的repo
* 指定下載後的資料夾名稱為test


remote
#查看remote目前有什麼
git remote

#刪除origin
git remote rm origin

#檢視目前origin的資訊
git remote show origin

#遠端branch更新到本機branch
git remote prune origin
* 遠端相關


config
#查看你的git設定內容。
#也可以使用cat ~/.gitconfig顯示你的.gitconfig設定
$ git config --list

#設定名稱;--global表示全域的設定。
$ git config --global user.name "jex"

#設定email
$ git config --global user.email "italwaysrainonme@gmail.com"
* git的設定檔


log
#加上--stat比不加上多出修改的地方
$ git log --stat

#精簡的log,每一次的commit資訊為一行,只顯示前7碼的SHA1及message
$ git log --oneline
* 查看commit紀錄


branch
#開一個分支叫做develop
$ git branch develop

#列出所有branch
$ git branch
  develop
* master

#顯示branch的資料
$ git branch -a
  develop
* master
  remotes/origin/master

#顯示branch的詳細資料
$ git branch -v
  develop 3536c6e 20130408 01:30 no send email and OK page
* master  3536c6e 20130408 01:30 no send email and OK page

#列出已經merge的branch
$ git branch --merged
  develop
* master

#列出尚未merge的branch
$ git branch --no-merged

#修改branch的名稱。,develop改成developXD
$ git branch -m develop developXD

#刪除branch
$ git branch -d developXD
Deleted branch developXD (was 3536c6e).

#看remote branch
$ git branch -r
  origin/master
* 分支


merge
#加上 --no-ff 作用是讓commit log紀錄您是開分支出去再merge回來的。
$ git merge --no-ff develop
* 合併分支
* 參考appleboy教學


add
#還不知道--patch用途
$ git add --patch
Only binary files changed.
* 增加進stage
* y 加到stage
* n 不要加到stage
* s 可以拆小一點hunk



checkout
#還原修改過的檔案
#1. 新增一個dd.txt的檔案,裡面文字輸入"123"
#2. git add dd.txt (加入stage)
#3. 將dd.txt的文字資料由123改為456
#4. 我後悔了,我想還原此次修改
#5. 輸入:$ git checkout -- dd.txt
#6. 資料確實還原為123了
$ git checkout -- 

#新增develop並且切換過去
$ git checkout -b develop

#myfeature會是由develop分支出來的branch
$ git checkout -b myfeature develop

#使檔案回復成最近一次commit的狀態
$ git checkout -- test.php

#強制回復己在add狀態被修改過的檔案, Untracked files則不受影響
git checkout -f

#所有track中且修改過的檔案回復成最近一次commit的狀態
git checkout .
* 切換branch


commit
#--amend改變最後一次commit訊息
#1. 假設最近一次commit的訊息是QQQ
#2. 然候我修改了一份檔案,突然想到,剛剛的commit訊息打錯了
#3. 於是輸入:$ git commit --amend -m "XXX" ,將原本訊息的QQQ改成XXX
#註 : 但是注意,雖然語法有commit,但是並不會將剛剛修改的檔案commit到最近一次的commit
#     ,所以可以放心使用,只僅僅會改變最近一次commit的訊息而已,資料不會變動
$ git commit --amend
* 提交


diff
#比較上一個commit的差異
$ git diff HEAD^

#觀看非stage與上一版本的差異,未add過
$ git diff --

#觀看stage與上一版本差異,已add過
$ git diff --cached

#比較branch的差異
$ git diff branch

#查看差異的概要
$ git diff --stat

#比較兩個commit差異
$ git diff sha1..sha1
* 比較差異
* ctrl + z 離開


pull
#避免不必要的 Merge
#公司的高手教學:
#Joseph: 我們常常在 git pull 時會產生一次的 Merge 也就是針對你本地端的 Repo 跟 miiicasa 的 Repo
#        所以在 commit log 上都會有一堆 Merge 的訊息,但其實這個是沒必要的垃圾訊息,可用此避免。
#Ash Wu: 可以在 ~/.gitconfig 設定
#        [branch]
#          autosetuprebase = always
#        就可以預設 git pull --rebase 了,當然,需要不 rebase 的狀況可以用 git pull --no-rebase。
git pull --rebase
* 將repo從git server拉回本機


push
#加上 -f 是強制push, github之前的commit 紀錄會不見,只會有目前這個branch的commit 紀錄
$ git push origin master -f






---
參考資料:
http://blog.wu-boy.com/2011/03/git-%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6-branch-model-%E5%88%86%E6%94%AF%E6%A8%A1%E7%B5%84%E5%9F%BA%E6%9C%AC%E4%BB%8B%E7%B4%B9/

沒有留言:

張貼留言