alias g="git" alias gb="git branch" alias gco="git checkout" alias gcmsg="git commit -m" alias gamend="git commit --amend -C HEAD" alias gst="git status" alias log="git log --oneline --graph --decorate --color=always" alias logg="git log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)— %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative"
master 與本地 master 分支合并
gco master g fetch --all 或者 g fetch origin master g reset --hard origin/master(本地沒有修改,所以完全覆蓋也沒關(guān)系) 或者 g rebase origin/master(本地有修改還沒push)
假設(shè)現(xiàn)在所在的分支是 import,指定推送到遠(yuǎn)端分支 codecloud-import
g push origin import:codecloud-import
假如遠(yuǎn)端的 liujin-import 分支已經(jīng)不需要,可以直接覆蓋掉
g push -f origin import:codecloud-import
有時候修完某功能并提交了 commit 之后才發(fā)現(xiàn)還有一點小修改,這時候又不想再提交一個commit,可以追加這個文件到前一個commit,步驟如下:
it add 你要追加修改的文件 git commit --amend -C HEAD 或者 gamend
git log 文件路徑 git show commit_id
or
git log --follow filename(絕對路徑)
老大常說要養(yǎng)成一個小改動對應(yīng)一個commit的習(xí)慣,但是有時候?qū)懙锰珌y懶得去分割就把很多改動做成了一個commit,這樣子增加了以后維護(hù)的難度,所以要把一個 commit 分拆為多個 commit 怎么辦呢?
首先把你要分拆的 file reset 了:
git reset HEAD~1 path/to/file # This doesn't delete your changes to path/to/file
接著修改當(dāng)前這個 commit 的 message,命令是:
git commit --amend -v # -v參數(shù)是打開editor編輯
然后就可以把 reset 出來那個 file 新建一個 commit,命令是:
git commit -v path/to/file
git rebase -i HEAD~10
假如 gst 發(fā)現(xiàn)已經(jīng)有文件被修改,這時候需要把修改暫存起來。
git stash
接著找到你需要追加修改的那個commit id,如4b739bb
g rebase 4b739bb~ -i 或者 g rebase -i HEAD~5 #列出近5個commit
這時候會自動打開編輯器,把你需要修改的 commit 前面的 pick 改成 edit,保存,關(guān)閉編輯器,這時候會回到終端,再輸入:
g stash pop
把暫存的修改讀出來,然后做修改,g add .,后
g rebase --continue
git log –grep
基本的用法
git log –grep=frotz –grep=nitfol –since=1.month
查找一個月以內(nèi)commit log message里含有 frotz 或者 nitfol 的 commits
git log –grep=frotz –author=Linus
查找指定作者
git grep -l -e frotz –and -e nitfol
查找同一行含有 frotz 和 nitfol 的文件
git grep -l –all-match -e frotz -e nitfol
查找文件里面含有 frotz 和 nitfol 的文件(不局限于同一行)
git clean -f
git clean -f -d
如果還想刪除目錄
git clean -f -X
如果只是想刪除忽略的文件
git clean -f -x
如果想刪除忽略和非忽略的文件
長時間做一個項目,經(jīng)常需要 git fetch,這樣做每次都會拉回遠(yuǎn)端的全部分支。
即使遠(yuǎn)端有些分支已經(jīng)刪除,但是運(yùn)行g(shù)it branch -a還是會顯示已刪除的分支,
長時間下來這個列表就會很長很長,這時候就需要清理一下本地的倉庫了:
git remote prune origin # `prune`會刪除任何不存在于遠(yuǎn)端倉庫的分支,這樣運(yùn)行 `git branch -a`命令的時候頓時就清靜了
gb dev origin/r1-dev #Branch dev set up to track remote branch r1-dev from origin.
13. 分支移動
g branch -f master HEAD~3 # 把 master 分支強(qiáng)制移到 HEAD 前面第三個 commit
git revert -m 1 M -> W
---o---o---o---M---x---x---W / ---A---B
git rev-parse --short HEAD
比如說一個nodejs項目,一開始的時候就忘記了創(chuàng)建.gitnore文件忽略掉node_modules的內(nèi)容,所以其中的內(nèi)容就已經(jīng)被提交了。
即使緊接著你在.gitignore加了一行node_modules, 已經(jīng)被提交的文件是不會自動刪除的。
這時候你就需要做的就是:
git rm --cached path/to/ignored #nodejs案例就是 git rm -r --cached node_modules
$ git add -u
這個命令告訴 git 自動更新已跟蹤的文件, 包括被刪除的已跟蹤文件。
如果你用的是 git 2.0
$ git add -u :/
友情提示:從 git 2.0(2013年中)開始,以上命令會 stage 整個 working tree 的文件。
如果你只是想 stage 當(dāng)前目錄的文件,應(yīng)該這么用:
$ git add -u .
這種情況通常是因為忘記添加.gitignore文件,或者一時手快把一些非必要的文件(如node_modules)跟蹤了, 解決辦法:
git reset
該命令會 unstage 你上一個 commit 增加的所有文件。
如果你只想 unstage 某些文件:
git reset --
還可以 unstage 文件里某處的改動:
git reset -p
本站文章版權(quán)歸原作者及原出處所有 。內(nèi)容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負(fù)責(zé),本站只提供參考并不構(gòu)成任何投資及應(yīng)用建議。本站是一個個人學(xué)習(xí)交流的平臺,網(wǎng)站上部分文章為轉(zhuǎn)載,并不用于任何商業(yè)目的,我們已經(jīng)盡可能的對作者和來源進(jìn)行了通告,但是能力有限或疏忽,造成漏登,請及時聯(lián)系我們,我們將根據(jù)著作權(quán)人的要求,立即更正或者刪除有關(guān)內(nèi)容。本站擁有對此聲明的最終解釋權(quán)。