#顯示目前索引有哪些檔案 #通常用在 , 如果不小心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 --* 切換branch#新增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 .
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/
沒有留言:
張貼留言