用gitbash進入類似命令行的窗口
用命令 cd e:/learngit 進入該目錄坎炼,然后在此目錄下初始化 git init, 于是該文件夾就成為了一個工作區(qū),里面的.git文件就是版本庫(repository)
在工作區(qū)中新建一個文件拾徙,比如XXX.txt文件
在txt中添加‘1111’文本,用 git add XXX.txt命令將XXX.txt添加到緩存中
git status查看狀態(tài)顯示change to be committed(改變已經(jīng)緩存)
已經(jīng)緩存的文件是無法用 git diff XXX.txt查看不同的,但可以用 git diff HEAD -- XXX.txt(注意-- 后的空格)
然后,用 git commit -m'解釋說明' 提交文檔
提交之后會顯示insertions(插入)绸吸,deletion(刪除),如果在最后添加新行會先刪除最后一行设江,再補充最后一行的文本和新行文本锦茁,于是就會顯示2 insertions ,1 deletions叉存;
如果是在原行添加內(nèi)容則會顯示 1 insertions 码俩,1 deletions;如果只是簡單的插入一個新行則會顯示 1 insertion
這時 git status查看狀態(tài) 顯示nothing to commit working directory clean(沒有東西提交歼捏,工作目錄為空)
這時為txt添加一行稿存,可以用 git diff比較不同
再用 git status查看狀態(tài) changes not staged for commit(改變沒有緩存到提交)
modified:XXX.txt
no changes added to commit (也沒有可以提交的改變)
好,現(xiàn)在將文件緩存并提交后
用 git log可查看提交日志瞳秽,但顯示的條目有限瓣履,所以用 git log --pretty=oneline更直觀 按q可退出
用 cat XXX.txt可查看當(dāng)前工作區(qū)文本內(nèi)容
用 git reset --hard 版本號 可回到相應(yīng)的版本或者用 gir reset --hard HEAD^ 可回到上一個版本,回到前一百個版本 gir reset --hard HEAD~100
用 git reflog(重新迫使) 可查看你的提交和回退日志练俐,也就是命令日志袖迎,因此也能看到相應(yīng)的版本號
git checkout -- XXX.txt 可以撤銷修改,如果已經(jīng)緩存再做修改腺晾,修改也只是在工作區(qū)燕锥,不會影響已經(jīng)緩存的文檔內(nèi)容
git reset HEAD XXX.txt 會將文檔回退到工作區(qū)的狀態(tài),如果文檔在暫存區(qū)時作了修改,那這個修改也只是在工作區(qū)作出的悯蝉,其實暫存區(qū)的文件只是一個副本而已归形,說是回退到工作區(qū),其實不如說是刪除該副本鼻由,比如文檔文本為‘1’暇榴,緩存后再修改為‘12’,現(xiàn)在回退(也就是刪除)那文檔文本仍為‘12’
rm XXX.txt 可以刪除工作區(qū)文檔嗡靡,但分支里的版本就跟工作區(qū)里的不一致了跺撼,也就是分支在工作區(qū)找不到對應(yīng)的文件作比較,因此讨彼,你也需要把分支里的版本刪除 git rm XXX.txt
歉井??哈误?在master上更改后切換分支會報錯:你的本地改變已經(jīng)被改寫哩至,請先提交或stash(備份)后再切換躏嚎,也就是說必須提交后才能切換,注意菩貌,這個時候即使緩存了也會報同樣的錯誤卢佣,而在dev分支上修改再切換到master卻可以,而且在dev分支上作的修改也會照樣在master上呈現(xiàn)
git branch -d dev刪除分支箭阶,如果你當(dāng)前在dev分支上虚茶,你是無法刪除dev分支的,需要切換到其他分支才能刪除
如果在dev上作了修改仇参。git stash 過后切換到master嘹叫,修改master,stash后又切換到dev诈乒,會發(fā)現(xiàn)git stash list上{0}master {1}dev所以此時不能用git stash apply(不會刪除stash list中的相應(yīng)儲存記錄)或git stash pop(會刪除list中的記錄)罩扇,應(yīng)該用git stash apply @{1}
在dev和master的同一行修改了內(nèi)容會引起沖突,比如dev ‘111’怕磨,master‘11111111’喂饥,雖然master只是在dev上增加了,但仍然沖突
如果在dev上創(chuàng)建了一個新分支conf肠鲫,那么在遠程任何分支上都可以創(chuàng)建conf 员帮,在本地conf分支上push origin dev 則會把dev分支上的內(nèi)容推送到遠程dev上
git remote -v可查看當(dāng)前分支在遠程的情況
git remote show origin 可查看遠程有哪些分支
獲取遠程分支 git fetch 此時查看分支列表沒有顯示剛獲取的分支,需要切換到該分支下才行
刪除遠程分支 git push origin :dev 但是本地分支仍然存在导饲,不會被影響
如果在遠程創(chuàng)建了一個分支集侯,而該分支和本地分支同名,當(dāng)切換到該分支時會提示用 ‘git pull’更新本地分支,其實pull就相當(dāng)于更新的功能
???克隆遠程倉庫時只能看到master分支帜消,想在dev分支上開發(fā)需要 git checkout -b dev origin/dev
如果在遠程的dev分支上修改,然后在本地conf分支上使用 git pull可以看到遠程有哪些文件修改了浓体,當(dāng)切換到dev分支上時還需要再次git pull才可更新該分支
如果在工作區(qū)新建了一個文件泡挺,此時在dev分支上add并commit再push,那就只在遠程dev上有該文件
git log可以查看在當(dāng)前分支下的版本記錄命浴,如果該分支是在其他分支上創(chuàng)建的娄猫,那相應(yīng)的記錄也會復(fù)制過來
git tag v1.0可以在給該分支的最近一次提交打上標簽,git tag v1.0 版本號 可以給相應(yīng)版本打上標簽生闲,無論在哪一個分支上媳溺,用git reset --hard v1.0都可以使該分支下的文件回退到該版本
git tag 查看所有標簽 git show v1.0查看標簽信息
這里區(qū)分一下 git reset --hard v1.0(重新設(shè)置為硬盤里的v1.0版本) git checkout -- XXX.txt (切換到當(dāng)前文本,也就是未被修改時的狀態(tài)) git reset HEAD XXX.txt(重新設(shè)置為當(dāng)前指針所指的版本碍讯,也就是緩存了的時候撤回工作區(qū))什么時候- 悬蔽,什么時候-- 如:-m,--hard
git branch --set-upstream-to=origin/dev
從pull過后捉兴,本地會多出一行
蝎困?录语??在本地pull后再push禾乘,push成功后在遠程發(fā)生沖突
刪除操作也需要提交
B分支衍生于A分支的話澎埠,B分支會保存A分支的提交歷史, git checkout --orphan dev創(chuàng)建一個無提交歷史的干凈的dev 分支
git rm -r --cached 文件夾名 //取消跟蹤
git rm --cached 文件名
.gitignore /.json 忽略當(dāng)前目錄下的json .json忽略所有json文件 即使不忽略!myfile myfile下的json仍然被忽略始藕,無論!myfile 蒲稳,*json這兩條語句前后
git ls-files 查看已經(jīng)被跟蹤的文件
git branch -m kill 重命名當(dāng)前分支為kill
git checkout -f 強制撤銷本地修改,對工作區(qū)和緩存區(qū)的修改都有效伍派,對已經(jīng)提交的修改無效
git revert HEAD 比如log里面有版本one和two江耀,那執(zhí)行此命令后為版本one two three,three是one的副本拙已,意味撤銷倉庫的最新提交决记,改為上一版本
遇到 #please commit ...的情況:這是vim的 insert 模式,在首行鍵入提交信息后按ESC退出vim的編輯模式倍踪,然后鍵入 :wq, 注意:號系宫,保存退出
git reset --hard origin/master 將本地的狀態(tài)回退到和遠程的一樣