git 使用筆記
git原理:
文件(blob)對(duì)象揍障,樹(shù)(tree)對(duì)象,提交(commit)對(duì)象
tree對(duì)象 : {指針俩由,權(quán)限模式毒嫡,類型,文件名}
commit對(duì)象: {上層tree指針幻梯,作者审胚,時(shí)間戳,上次提交對(duì)象id礼旅,注釋} 可通過(guò)git log 獲取
文件對(duì)象blob:{文件內(nèi)容}
- Git保存文件完整內(nèi)容膳叨。
- 儲(chǔ)鍵值對(duì)key-value。
- 文件的不同版本痘系,都有一個(gè)(40位)的 SHA-1校驗(yàn)和與之對(duì)應(yīng)菲嘴。
- SHA-1 校驗(yàn)和是文件的指針,Git依靠它來(lái)區(qū)分文件汰翠。
- 每一個(gè)文件都會(huì)在Git的版本庫(kù)里生成blob對(duì)象來(lái)保存龄坪。
- 對(duì)于沒(méi)有變化的文件,Git只會(huì)保留上一個(gè)版本的指針复唤。
- Git實(shí)際上是通過(guò)維持復(fù)雜的文件樹(shù)來(lái)實(shí)現(xiàn)版本控制的健田。
- 使用Git的工作流程基本就是就是文件在三個(gè)工作區(qū)域之間的流動(dòng)。
- 應(yīng)該大量使用分支進(jìn)行團(tuán)隊(duì)協(xié)作佛纫。
- 分支只是對(duì)提交對(duì)象的一個(gè)引用妓局。
SHA-1 校驗(yàn)和:
是文件指針,每個(gè)文件不同版本都有一個(gè)指針對(duì)應(yīng)
分布式版本控制
默認(rèn)分支是master呈宇,存儲(chǔ)在.git\refs\heads\master文件中
引用就是SHA-1 校驗(yàn)和的別名好爬,存儲(chǔ)在.git/refs文件夾中
引用master,Git默認(rèn)創(chuàng)建的始終指向你項(xiàng)目主分支的最后一次提交記錄
創(chuàng)建分支只是copy一份引用甥啄,非常輕量存炮,只有commit提交操作是重量的
git commit 文件改變 生成新的blob對(duì)象 存入一份新的文件快照
git commit 文件未改變 存入上一版本的文件指針
當(dāng)前分支的最后一次的提交ID cat .git/HEAD
tag指向一個(gè)commit對(duì)象,固定不變的。
存儲(chǔ)鍵值對(duì)(key-value)
工作目錄穆桂,暫存區(qū)域宫盔,以及本地倉(cāng)庫(kù)
已提交(committed),已修改(modified)和已暫存(staged)
git config 配置
換行符問(wèn)題:
Windows(\r\n)享完、Linux(\n)和MacOS(\r)三個(gè)系統(tǒng)的換行符不同飘言,在跨平臺(tái)合作的時(shí)候就會(huì)出現(xiàn)換行符的問(wèn)題。 Git 提供了 autocrlf 和 safecrlf 兩個(gè)參數(shù)來(lái)解決這個(gè)問(wèn)題驼侠。
例如姿鸿,出現(xiàn)這種情況: A和B兩個(gè)開(kāi)發(fā)人員,A使用LF(\n)做換行符倒源,B使用CRLF(\r\n)做換行符苛预,且都沒(méi)有開(kāi)啟 autocrlf 參數(shù),那么A在遷出B的文件笋熬,并使用自己的編輯器打開(kāi)之后就會(huì)發(fā)現(xiàn)热某,雖然沒(méi)有對(duì)文件做任何修改,但它的狀態(tài)是modified胳螟。這是由于A的編輯器自動(dòng)將B的文件中的所有換行符替換成了(LF)昔馋,這與版本庫(kù)中的(CRLF)不同。
autocrlf:
git config --global core.autocrlf true # 簽出時(shí)將換行符轉(zhuǎn)換成CRLF糖耸,簽入時(shí)轉(zhuǎn)換回 LF秘遏。
git config --global core.autocrlf input #簽出時(shí)不轉(zhuǎn)換換行符,簽入時(shí)轉(zhuǎn)換回 LF
git config --global core.autocrlf false #簽出簽入均不轉(zhuǎn)換
safecrlf:
如果你把換行符搞亂了嘉竟,在一個(gè)文件中既包含windows風(fēng)格的換行符也包含unix風(fēng)格換行符邦危。
git config --global core.safecrlf true # 拒絕提交包含混合換行符的文件
git config --global core.safecrlf false # 允許提交包含混合換行符的文件
git config --global core.safecrlf warn # 提交包含混合換行符的文件時(shí)候給出警示
問(wèn)題描述
項(xiàng)目組現(xiàn)在用git做版本控制,使用中遇到不同平臺(tái)下?lián)Q行符不同造成的問(wèn)題舍扰,windows下的換行符為crlf倦蚪,linux和MAX OS 下?lián)Q行符是 lf。linux和MAX os就按說(shuō)明設(shè)置為core.autocrlf input(貌似是默認(rèn)值)边苹,windows設(shè)置為core.autocrlf true陵且。可是有時(shí)候還是會(huì)遇到換行符的問(wèn)題个束。review的時(shí)候就會(huì)發(fā)現(xiàn)有的commit的變化是所有行都被刪除重建
解決方案:
無(wú)論什么系統(tǒng)慕购,把所有人的編輯器的換行符模式設(shè)置成Unix格式,然后把a(bǔ)utocrlf設(shè)置成false播急。
修改git設(shè)置 core.autocrlf=input.檢出時(shí)不轉(zhuǎn)換脓钾,提交轉(zhuǎn)換為lf,這樣可以避免提交windows換行符的情況桩警;
修改eclipse設(shè)置 windows>General> workspace 下 new text file line delimiter 選擇Unix。
已有的項(xiàng)目可能已經(jīng)存在換行符不同的問(wèn)題需要修正一下昌妹。 如果當(dāng)前開(kāi)發(fā)有多個(gè)分支且各分支不同步捶枢,需要每個(gè)分支進(jìn)行一次轉(zhuǎn)換:選中項(xiàng)目 file> convert line delimiter to > Unix 握截,創(chuàng)建新的commit; 如果只有一個(gè)分支或多個(gè)分支處于同一節(jié)點(diǎn)烂叔〗靼可以從master切換一個(gè)新分支,進(jìn)行第2步的修改操作蒜鸡,然后commit 胯努,將此分支合并到所有分支。
將修改過(guò)的分支push到gitlab逢防,其他成員更新代碼即可叶沛。 (ps:由于每個(gè)人系統(tǒng)不同或者就是git的問(wèn)題,可能出現(xiàn)更新完代碼換行符不變忘朝,這時(shí)以服務(wù)器上的代碼為準(zhǔn)重新clone一份最新代碼即可)
.ignore文件
*.html #忽略所有html
!foo.html # 不忽略foo.html
*.[oa] # 忽略所有.o和 .a文件
dbg # 忽略dbg文件和dbg目錄
dbg/ # 只忽略dbg目錄
!dbg/ #不忽略dbg目錄
/dbg # 只忽略當(dāng)前目錄下的dbg文件和目錄灰署,子目錄的dbg不在忽略范圍內(nèi)
錯(cuò)誤解決方案:注意帶sudo
git Please move or remove them before you can merge. 錯(cuò)誤解決方案
git clean -d -fx ""
x -----刪除忽略文件已經(jīng)對(duì)git來(lái)說(shuō)不識(shí)別的文件
d -----刪除未被添加到git的路徑中的文件
f -----強(qiáng)制運(yùn)行
修改git commit 提交
- 沒(méi)有g(shù)it push : git commit --amend參數(shù)
- 已 git push :
git commit --amend改寫(xiě)單次commit
git rebase -i <commit range>刪改排以及合并多個(gè)commit
git checkout <commit> -- <filename>獲取歷史版本的某個(gè)文件
git reset [--hard] <commit>移動(dòng)HEAD指針
git revert <commit>創(chuàng)建一個(gè)回退提交
git push -f <remote> <branch>強(qiáng)制push,覆蓋原有遠(yuǎn)程倉(cāng)庫(kù)
https://github.com/uolcano/blog/issues/12
git pull****失敗當(dāng)本地commit一個(gè)提交和遠(yuǎn)端服務(wù)器中的代碼有沖突(別人也改了相同的文件)時(shí)
git pull --rebase
- 把本地 repo. 從上次 pull 之后的變更暫存
- 恢復(fù)到上次 pull 時(shí)的狀態(tài)
- 合并遠(yuǎn)端的變更到本地
- 最后再合并剛剛暫存下來(lái)的本地變更
git rebase 合并
rebase的時(shí)候局嘁,修改沖突后的提交不是使用commit命令溉箕,而是執(zhí)行rebase命令指定 --continue選項(xiàng)。若要取消rebase悦昵,指定 --abort選項(xiàng)肴茄。
$ git add myfile.txt
$ git rebase --continue
git stash 保存工作區(qū)
保存:git stash 保存當(dāng)前操作 git stash save “msg”
查看:git stash list
恢復(fù): git stash apply <stash@{num}>,默認(rèn)恢復(fù)上次操作但指,不刪除stash內(nèi)容独郎;恢復(fù)指定序號(hào)<stash@{num}>;
git stash pop <stash@{num}>,默認(rèn)恢復(fù)上次操作,同時(shí)刪除stash內(nèi)容枚赡;恢復(fù)指定序號(hào)的操作<stash@{num}>
刪除: git stash drop <stash@{num} > 默認(rèn)刪除上次記錄氓癌;刪除指定記錄<stash@{num}>
git stash clear 清空所有記錄
git diff
git diff HEAD^^ HEAD main.c //兩個(gè)提交之間查看文件" main.c"的差異
你還可以在兩個(gè)不同版本中比較兩個(gè)不同的文件,如下所示:
git diff <revision_1>:<file_1> <revision_2>:<file_2>**
git 遠(yuǎn)程操作 5個(gè)命令
- git clone git clone -o <參數(shù)-o命名遠(yuǎn)程主機(jī)> <版本庫(kù)的網(wǎng)址> <本地目錄名>
- git remote 改名:git remote rename <原主機(jī)名> <新主機(jī)名> 添加遠(yuǎn)程主機(jī):git remote add <主機(jī)名> <網(wǎng)址> 查看詳情:git remote show <主機(jī)名>
- git fetch 取回遠(yuǎn)程分支更新: git fetch <遠(yuǎn)程主機(jī)名> <分支名>
- git pull git push <遠(yuǎn)程主機(jī)名> <來(lái)源地>:<目的地>
- git push
git tag 標(biāo)簽(打在HEAD指向的commit里)
輕標(biāo)簽(名稱) 本地臨時(shí)使用 git tag <tagname>
注解標(biāo)簽(名稱贫橙,注解草描,簽名) 發(fā)版使用
git tag
git tag stable-1 1b2e3f
git tag [-a|-s|-u] stable-1 1b2e3f
git tag -a <tagname> -m “選項(xiàng)來(lái)添加注解”
git tag -am “注解”標(biāo)簽名
如果在tag命令指定-n選項(xiàng)執(zhí)行,可以顯示標(biāo)簽的列表和注解
BASIC:
git add files 把當(dāng)前文件放入暫存區(qū)域
git commit 給暫存區(qū)域生成快照并提交
git status 查看狀態(tài) gst
git diff 對(duì)比工作區(qū)與版本庫(kù)內(nèi)容
git log 查看所有commit記錄
git reflog 查看所有操作記錄
git checkout xxx 切換到xxx分支
git branch 查看分支
git checkout -b xxx 創(chuàng)建并切換到新分支
git merge xxx 合并xxx分支到當(dāng)前
git branch -d xxx 刪除xxx分支
git diff HEAD -- <文件名> 對(duì)比工作區(qū)和版本庫(kù)最新版本的修改
修改回退:
git reset HEAD <文件名> 退出暫存區(qū) 修改保留
git checkout -- <文件名> 沒(méi)git add 拿暫存區(qū)替換疏哗;已git add拿版本庫(kù)替換
git reset –hard HEAD^ 回退上一版本(本地源碼一起改變)
git reset --hard commitID 回退到指定版本
撤銷git add
git reset --mixed 版本回退若未,所有文件退出暫存區(qū),但是修改保留
git reset <文件目錄>/ 撤銷目錄
git reset –soft:修改保留在暫存區(qū)莫湘,如果還要提交直接commit即可
git reset –hard:徹底回退到某個(gè)版本尤蒿,本地的源碼也會(huì)變?yōu)樯弦粋€(gè)版本的內(nèi)容
git reset 提交層面 在私有分支上舍棄一些沒(méi)有提交的更改
git reset 文件層面 將文件從緩存區(qū)中移除
git checkout 提交層面 切換分支或查看舊版本
git checkout 文件層面 舍棄工作目錄中的更改
git revert 提交層面 在公共分支上回滾更改
git revert 文件層面 (木有)
刪除文件
git rm <文件名> && git commit -m 從版本庫(kù)刪除 (git rm 從暫存區(qū)刪除)
git checkout -- <文件名> 從版本庫(kù)恢復(fù)
其他操作
git reset -- files 撤銷最后一次git add files,git reset撤銷所有暫存區(qū)文件
git checkout -- files 從暫存區(qū)域復(fù)制到工作區(qū)幅垮,丟棄沒(méi)有g(shù)it add的修改
git commit -a 相當(dāng)于git add + git commit
git commit files
git checkout HEAD -- files 回滾到復(fù)制最后一次提交
遠(yuǎn)程操作
git clone <庫(kù)地址> 克隆遠(yuǎn)程庫(kù)到本地
git remote -v 列出關(guān)聯(lián)的遠(yuǎn)程主機(jī)
git remote add <庫(kù)名><庫(kù)地址> 關(guān)聯(lián)遠(yuǎn)程庫(kù)
<庫(kù)地址> 取消遠(yuǎn)程庫(kù)關(guān)聯(lián)
git push :gh-pages 刪除遠(yuǎn)程分支(原理:推送空白分支覆蓋)
git remote rename <原名> <新名> 參數(shù)rename腰池,遠(yuǎn)程庫(kù)改名
git fetch <遠(yuǎn)程主機(jī)名> <分支名> 拉取遠(yuǎn)程庫(kù)更新
git branch -r <遠(yuǎn)程主機(jī)名> <分支名> 查看遠(yuǎn)程分支
git branch -a 查看所有分支(包括遠(yuǎn)程分支)
git pull <遠(yuǎn)程庫(kù)名> <遠(yuǎn)程分支名>:<本地分支名> 取回遠(yuǎn)程主機(jī)某個(gè)分支的更新,再與本地的指定分支合并
git push <遠(yuǎn)程庫(kù)名> <本地分支名>:<遠(yuǎn)程分支名>
git push origin dev:dev_branch // 推送本地dev分支到遠(yuǎn)程dev_branch分支
在命令行上創(chuàng)建新的存儲(chǔ)庫(kù)
echo“#LargeScreen”>> README.md
git init
git add README.md
git commit -m“first commit”
git remote add origin git@github.com:qiansr/LargeScreen.git
git push -u origin master
從命令行推送現(xiàn)有存儲(chǔ)庫(kù)
git remote add origin git@github.com:qiansr/LargeScreen.git
git push -u origin master
git reset --soft HEAD^
終極恢復(fù)
git reflog 顯示整個(gè)本地倉(cāng)儲(chǔ)的commit(所有branch,包括已撤銷的commit)
git log 只包括當(dāng)前分支的commit.
git reflog --relative-date 顯示相對(duì)時(shí)間的commit紀(jì)錄
分支
git branch 查看分支
git branch <分支> 創(chuàng)建分支
git checkout <分支> 切換到分支
git checkout -b <分支> 創(chuàng)建+切換分支
git merge <分支> 合并分支到當(dāng)前分支
git branch -d <分支> 刪除分支
git branch -D <分支> 強(qiáng)行刪除沒(méi)被合并的分支
git merge --no-ff -m "" dev merge時(shí)會(huì)生成一個(gè)新的commit
分支策略
master分支 發(fā)布新版本
dev分支 每個(gè)人都有自己的分支示弓,往dev分支上合并
—no-ff參數(shù) 用普通模式合并讳侨,能看出曾經(jīng)做過(guò)合并
fast forward合并 看不出來(lái)曾經(jīng)做過(guò)合并
Bug****修復(fù)
首先,隱藏當(dāng)前工作現(xiàn)場(chǎng)
git stash
確定要在哪個(gè)分支上修復(fù)****bug****奏属,就從那個(gè)分支創(chuàng)建臨時(shí)****bug****分支
$ git checkout master
$ git checkout -b issue-101
修復(fù)****bug****跨跨,然后提交
$ git add readme.txt
$ git commit -m "fix bug 101"
切換到****master****分支,完成合并囱皿,最后刪除****bug****分支
git checkout master
git merge --no-ff -m "merged bug fix 101" issue-101
最后回到****dev****分支干活
$ git checkout dev
工作流程模式:
- 首先勇婴,可以試圖用git push origin branch-name推送自己的修改
- 如果推送失敗,則因?yàn)檫h(yuǎn)程分支比你的本地更新嘱腥,需要先用git pull試圖合并
- 如果合并有沖突耕渴,則解決沖突,并在本地提交
- 沒(méi)有沖突或者解決掉沖突后爹橱,再用git push origin branch-name推送就能成功萨螺!
注意:
如果git pull提示“no tracking information”,則用命令git branch --set-upstream dev origin/dev 創(chuàng)建本地分支和遠(yuǎn)程分支的關(guān)鏈愧驱。
查看遠(yuǎn)程庫(kù)信息慰技,使用git remote -v;
本地新建的分支如果不推送到遠(yuǎn)程组砚,對(duì)其他人就是不可見(jiàn)的吻商;
標(biāo)簽管理
Git的標(biāo)簽是版本庫(kù)的快照,它指向某個(gè)commit的指針糟红。發(fā)布一個(gè)版本時(shí)艾帐,先打一個(gè)版本標(biāo)簽,這樣盆偿,就唯一確定了打標(biāo)簽時(shí)刻的版本柒爸。將來(lái)無(wú)論什么時(shí)候,取某個(gè)標(biāo)簽的版本事扭,就是把那個(gè)打標(biāo)簽的時(shí)刻的歷史版本取出來(lái)捎稚。
git tag git tag用來(lái)為某個(gè)提交創(chuàng)建一個(gè)輕量級(jí)標(biāo)簽
$git tag stable-1 1b2e3f
如果想為標(biāo)簽添加注釋,那么需要?jiǎng)?chuàng)建一個(gè)標(biāo)簽對(duì)象求橄。創(chuàng)建標(biāo)簽對(duì)象后今野,一個(gè)對(duì)象就會(huì)被添加到git對(duì)象庫(kù)中,然后標(biāo)簽指向這個(gè)對(duì)象
$git tag [-a|-s|-u] stable-1 1b2e3f
簽名的標(biāo)簽
git config user.signingkey
git diff $git diff [--cached]
--cached參數(shù)只顯示將要被提交的改變
$git diff branch1..branch2
比較兩個(gè)分支
$git diff HEAD
比較當(dāng)前工作目錄和上次提交(HEAD)
$git diff file
比較file在當(dāng)前工作目錄和上次提交
[--stat] 統(tǒng)計(jì)數(shù)據(jù)
git pull $git pull repourl branchname
默認(rèn)的branch_name是master罐农,這會(huì)將遠(yuǎn)程的repo拉過(guò)來(lái)并且和當(dāng)前分支合并条霜。
遠(yuǎn)程工作時(shí),可以添加別名
$git remote add aliasname repourl
$git fetch alias_name
fetch命令只會(huì)拉下來(lái)更新涵亏,而不會(huì)執(zhí)行merge工作
$git merge aliasname/branchname
github 創(chuàng)建項(xiàng)目主頁(yè)****page
- 登錄github 新建一個(gè) mybook項(xiàng)目 倉(cāng)庫(kù)
- 建立本地git的遠(yuǎn)程關(guān)聯(lián)
git remote add mybook git@github.io/xxx.git //
git checkout -b ph-pages // 建立ph-pages分支
git add xxx
git commit -m "" //將要發(fā)布的內(nèi)容提交入庫(kù)
git push mybook -u ph-pages //推送到遠(yuǎn)程倉(cāng)庫(kù)并 -u參數(shù)建立綁定
通過(guò)訪問(wèn)****http:///github.io/<****項(xiàng)目名****> 訪問(wèn)項(xiàng)目主頁(yè)
git log 查看提交日志
glgga git log --all --decorate --graph --decorate參數(shù) 顯示所標(biāo)記的標(biāo)簽
glola ||**glol **
ZSH git命令簡(jiǎn)寫(xiě)
gb='git branch'
gba='git branch -a'
gbda='git branch --merged | command grep -vE "^(*|\smaster\s$)" | command xargs -n 1 git branch -d'**
gbl='git blame -b -w'
gbnm='git branch --no-merged'
gbr='git branch --remote'
gbs='git bisect'
gbsb='git bisect bad'
gbsg='git bisect good'
gbsr='git bisect reset'
gbss='git bisect start'
g='git'
ga='git add'
gaa='git add --all'
gapa='git add --patch'
gc='git commit -v'
gc!='git commit -v --amend'
gca='git commit -v -a'
gca!='git commit -v -a --amend'
gcan!='git commit -v -a -s --no-edit --amend'
gcam='git commit -a -m'
gcb='git checkout -b'
gcf='git config --list'
gcl='git clone --recursive'
gclean='git clean -fd'
gpristine='git reset --hard && git clean -dfx'
gcm='git checkout master'
gcmsg='git commit -m'
gco='git checkout'
gcount='git shortlog -sn'
compdef gcount=git
gcp='git cherry-pick'
gcs='git commit -S'
gd='git diff'
gdca='git diff --cached'
gdct='git describe --tags git rev-list --tags --max-count=1
'
**gdt='git diff-tree --no-commit-id --name-only -r' **
gdw='git diff --word-diff'
gf='git fetch'
gfa='git fetch --all --prune'
gfo='git fetch origin'
gg='git gui citool'
gga='git gui citool --amend'
ggpull='git pull origin $(git_current_branch)'
ggpush='git push origin $(git_current_branch)'
ggsup='git branch --set-upstream-to=origin/$(git_current_branch)'
ggpur='ggu'
gignore='git update-index --assume-unchanged'
gignored='git ls-files -v | grep "^[[:lower:]]"'
git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk'
gk='\gitk --all --branches'
gke='\gitk --all $(git log -g --pretty=format:%h)'
gl='git pull'
git log --all --decorate --graph
glg='git log --stat'
glgp='git log --stat -p'
glgg='git log --graph'
glgga='git log --graph --decorate --all'
glgm='git log --graph --max-count=10'
glo='git log --oneline --decorate'
glol="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
glola="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all"
glog='git log --oneline --decorate --graph'
glp="_git_log_prettily"
gm='git merge'
gmom='git merge origin/master'
gmt='git mergetool --no-prompt'
gmtvim='git mergetool --no-prompt --tool=vimdiff'
gmum='git merge upstream/master'
gp='git push'
gpd='git push --dry-run'
gpoat='git push origin --all && git push origin --tags'
gpu='git push upstream'
gpv='git push -v'
gr='git remote'
gra='git remote add'
grb='git rebase'
grba='git rebase --abort'
grbc='git rebase --continue'
grbi='git rebase -i'
grbm='git rebase master'
grbs='git rebase --skip'
grh='git reset HEAD'
grhh='git reset HEAD --hard'
grmv='git remote rename'
grrm='git remote remove'
grset='git remote set-url'
grt='cd $(git rev-parse --show-toplevel || echo ".")'
gru='git reset --'
grup='git remote update'
grv='git remote -v'
gsb='git status -sb'
gsd='git svn dcommit'
gsi='git submodule init'
gsps='git show --pretty=short --show-signature'
gsr='git svn rebase'
gss='git status -s'
gst='git status'
gsta='git stash'
gstaa='git stash apply'
gstd='git stash drop'
gstl='git stash list'
gstp='git stash pop'
gsts='git stash show --text'
gsu='git submodule update'
gts='git tag -s'
gtv='git tag | sort -V'
gunignore='git update-index --no-assume-unchanged'
gunwip='git log -n 1 | grep -q -c "--wip--" && git reset HEAD~1'
gup='git pull --rebase'
gupv='git pull --rebase -v'
glum='git pull upstream master'
gwch='git whatchanged -p --abbrev-commit --pretty=medium'
gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit -m "--wip--"'
分支合并
rebase宰睡,merge
分支變基:
$ git checkout dev
$ git rebase master
git checkout master
$ git merge dev
git與svn命令對(duì)比
常用的svn與git命令對(duì)比如下:
svnadmin create ------------------------------> git init
svn co ------------------------------> git clone
svn update ------------------------------> git pull
svn add ------------------------------> git add
svn commit ------------------------------> git add, git commit
svn status ------------------------------> git status
svn switch <branch> ------------------------> git checkout <branch>
svn merge <branch> ------------------------> git merge <branch>
svn revert <file> ------------------------------> git checkout <file>
設(shè)置當(dāng)前倉(cāng)庫(kù)的user.name/user.email
$ git config user.email aaa
$ git config user.email aaa@aaa.com
設(shè)置全局user.name/user.email
$ git config --global user.name yinlijun
$ git config --global user.email yinlijun2004@gmail.com