git 工作區(qū)域
git的工作區(qū)域.png
本地開發(fā)完之后通過add命令會(huì)把本地工作區(qū)的代碼添加到暫存區(qū)(stage)缓窜,然后commit之后會(huì)將stage中的代碼提交到本地分支的版本庫(kù)中阔籽,之后執(zhí)行push會(huì)推到遠(yuǎn)程分支中春锋。
分支管理策略
master應(yīng)該是非常穩(wěn)定的,也就是近用來發(fā)布的新版本,平時(shí)不在上面開發(fā),所有的開發(fā)應(yīng)該在dev分支上,測(cè)試驗(yàn)收完成慎菲,再把dev合并到master發(fā)布版本。
Bug分支
有時(shí)候在開發(fā)過程中需要緊急修復(fù)一個(gè)bug锨并,想要pull最新的代碼露该,但是又不想將正在開發(fā)到一半的代碼提交,那么可以先暫存開發(fā)的代碼第煮,使其返回到自己上一個(gè)commit解幼,改完bug之后再stash pop抑党,繼續(xù)原來的工作。
git stash 暫存當(dāng)前代碼
git stash pop 取出暫存的代碼
git stash list 查看現(xiàn)有的儲(chǔ)藏
feature分支(功能分支)
如果有多人協(xié)作的話撵摆,需要開出多個(gè)feature分支底靠,各自開發(fā)完成之后再合并。
打開gitlib然后新建一個(gè)項(xiàng)目取好名字特铝,然后按照底下給的提示在cmd中create 倉(cāng)庫(kù)暑中。注意在更新項(xiàng)目時(shí)要先pull,然后提交更新然后push
git提交文件的順序:
git add . // add全部文件
git add a b c d e // 文件之間添加空格表示依次添加文件
git commit -m "" 提交代碼到本地
git pull 拉去代碼
git push push代碼
git status 查看更改的文件
拉取遠(yuǎn)程分支并創(chuàng)建本地分支
git checkout -b 本地分支名x origin/遠(yuǎn)程分支名x(使用該方式會(huì)在本地新建分支x鲫剿,并自動(dòng)切換到該本地分支x鳄逾。)
git fetch origin 遠(yuǎn)程分支名x:本地分支名x(使用該方式會(huì)在本地新建分支x,但是不會(huì)自動(dòng)切換到該本地分支x灵莲,需要手動(dòng)checkout雕凹。)
版本回退
git 將本地的狀態(tài)回退到和遠(yuǎn)程一樣
git reset --hard origin/master
查看分支
查看本地分支:git branch 查看本地以及遠(yuǎn)程分支:git branch -a
切換分支
切換分支:git checkout "分支名"
創(chuàng)建分支
從已有的分支創(chuàng)建新分支(如從master分支),創(chuàng)建一個(gè)dev分支:
git checkout -b dev,如果需要從某一個(gè)分支切出另一個(gè)分支政冻,需要先切換到該分支下枚抵,然后在該分支中執(zhí)行該命令,則可以從該分支中創(chuàng)建出另一個(gè)分支明场。
遠(yuǎn)程與本地關(guān)聯(lián)
遠(yuǎn)程沒有關(guān)聯(lián)local_branch分支汽摹,并且本地已經(jīng)切換到remote_branch分支,要關(guān)連本地和遠(yuǎn)程分支:
git push origin local_branch:remote_branch
切換分支之前需要將當(dāng)前分支修改的內(nèi)容全部提交完榕堰,如果未提交完成則無法提交竖慧。
標(biāo)綠色表示當(dāng)前分支
在分支下pull或者push
git push origin develop (develop為分支名)
或者git push origin develop(本地分支):
git pull origin develop(遠(yuǎn)程分支):devleop(本地分支)
下面的命令執(zhí)行前提是在gitLab上有了地址
Git global setup
git config --global user.name "魏昌洲"
git config --global user.email "wcz345583696@163.com"
Create a new repository
git clone http://10.116.15.196:9999/wcz123/TestProject.git
cd TestProject
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
Existing folder
cd existing_folder
git init
git remote add origin http://10.116.15.196:9999/wcz123/TestProject.git
git add .
git commit -m "Initial commit"
git push -u origin master
Existing Git repository
cd existing_repo
git remote add origin http://10.116.15.196:9999/wcz123/TestProject.git
git push -u origin --all
git push -u origin --tags
如何將本地的master代碼關(guān)聯(lián)到分支上:直接從分支上拉取代碼嫌套。
例如直接在master上拉取下來的代碼上執(zhí)行g(shù)it pull origin develop逆屡。
關(guān)于.gitignore
如果項(xiàng)目中沒有.gitignore文件,可以手動(dòng)創(chuàng)建一個(gè)踱讨。
有時(shí)候.gitignore不起作用魏蔗,原因就是因?yàn)?gitignore只能忽略那些原來沒有被track的文件,如果某些文件已經(jīng)被納入了版本管理中痹筛,則修改.gitignore是無效的莺治。解決方法就是先把本地緩存刪除(改變成未track狀態(tài)),然后再提交:
git rm -r --cached .
git add .
git commit -m “gitupdate gitignore file”
有時(shí)候執(zhí)行這樣的操作之后帚稠,在add時(shí)有的文件會(huì)的追蹤會(huì)丟失谣旁,需要進(jìn)入該文件目錄中將.git文件刪除之后再add。
如果要在.gitignore中添加某一個(gè)需要忽略的文件可以針對(duì)該文件做忽略 eg:
如果.gitignore寫的有問題滋早,需要找出來是哪里寫錯(cuò)了榄审,可以用git check-ignore命令檢查。
如何在新建項(xiàng)目時(shí)拉取到develop上的代碼:
先git clone 代碼杆麸,這時(shí)候本地代碼是master上的搁进,然后執(zhí)行g(shù)it checkout -b 本地分支名x origin/遠(yuǎn)程分支名x 拉取分支代碼并在本地創(chuàng)建分支浪感。可參考http://blog.csdn.net/tterminator/article/details/52225720饼问。
git diff
git diff 文件 查看文件修改影兽,查看文件修改了哪些地方,cd到該文件下莱革,然后執(zhí)行該命令峻堰。圖片中紅色的地方是沒修改之前的,綠色的是修改了的盅视。
屏幕快照 2018-01-24 下午5.17.45.png
git fetch
git fetch 更新遠(yuǎn)程分支茧妒,比如其他人創(chuàng)建了一個(gè)遠(yuǎn)程分支,你這邊沒更新到左冬,可以用git fetch命令更新一下桐筏。
git fetch <遠(yuǎn)程主機(jī)名>某個(gè)遠(yuǎn)程主機(jī)的更新,全部取回本地拇砰。
git fetch <遠(yuǎn)程主機(jī)名><分支名>取回所有分支(branch)的更新梅忌。
git fetch -p 遠(yuǎn)程有刪除的分支,通過該命令可以更新
git merge
git merge命令用于合并指定分支到當(dāng)前分支除破。例如將dev分支合并到master分支上:
1牧氮、切換到master分支下
2、執(zhí)行g(shù)it merge dev命令將dev分支合并到master分支瑰枫。
3踱葛、將遠(yuǎn)程的分支合并到本地:git merge origin/dev(遠(yuǎn)程的分支)
4、git merge dev1 合并本地分支dev1到當(dāng)前分支
刪除分支
git push origin :dev (origin后面有空格) 刪除遠(yuǎn)程分支光坝∈蹋或者git push origin --delete 分支名
git branch -d <BranchName> 在本地刪除遠(yuǎn)程已經(jīng)刪除的分支。
git branch -D <BranchName> 刪除本地分支盯另。
在刪除本地分支之前性含,當(dāng)前分支不能為該分支。
git log
git log --graph --pretty=oneline --abbrev-commit
查看分支的合并情況鸳惯,包括分支合并圖商蕴、一行顯示、提交校驗(yàn)碼縮略顯示芝发。
版本回退
git reset --hard HEAD^
回退到上一個(gè)版本绪商。
同理,回退到上上個(gè)版本為:HEAD^ ^辅鲸, 回退到上100個(gè)版本為:HEAD-100格郁,貌似波浪號(hào) ~ 也可以,變成倒數(shù)第101個(gè)。
git checkout . 類似git reset的作用理张,放棄對(duì)文件的修改
git tag
版本的發(fā)布會(huì)一直持續(xù)赫蛇,如果上一個(gè)版本出了問題,我們需要版本追溯時(shí)可以通過git tag直接定位到出問題的版本雾叭。通過這個(gè)命令可以避免不斷的開出分支來保留上一個(gè)版本悟耘。
git tag 查看目前有哪些tag。
git show tag-name 查看某一個(gè)tag下的具體信息织狐。
git checkout tag-name 將工程定位到相應(yīng)的tag處暂幼。
git tag -a v1.0.0 -m “1.0.0版本” 為當(dāng)前版本添加附注。
git push origin v1.0.0單獨(dú)提交本次tag移迫。
git push --tags 提交所有tags旺嬉。
git tag -d v1.0.0 刪除標(biāo)簽。
git push origin --delete tag <tagname> 刪除遠(yuǎn)端tag厨埋。
在gitlab下邪媳,一般只有項(xiàng)目創(chuàng)建者才有權(quán)限合并和提交代碼到master上,如果要給開發(fā)者提供開發(fā)master分支的權(quán)限荡陷,需要在項(xiàng)目面板Settings ->Repository中將項(xiàng)目的開發(fā)權(quán)限放開雨效。
[圖片上傳中...(屏幕快照 2018-02-24 上午10.46.48.png-dc3cbf-1519440588579-0)]
查看歷史提交明細(xì):
1、gitLab -> Repository -> Commits然后查看提交過的文件的詳細(xì)更改
2废赞、或者可以cd到某一個(gè)文件下徽龟,通過git log filename來看這個(gè)文件以往的提價(jià)記錄,每個(gè)提交記錄對(duì)應(yīng)著一個(gè)hash值唉地,然后執(zhí)行g(shù)it show hashValue來查看具體的內(nèi)容据悔。
git reflog 查看各分支的提交記錄
這個(gè)命令記錄了所有的提交記錄,HEAD前面的值是關(guān)鍵耘沼,如果代碼合并或者出現(xiàn)了別的錯(cuò)誤极颓,需要恢復(fù)到某一個(gè)提交的點(diǎn),可以先用這個(gè)命令查看所有的提交記錄耕拷,找到需要的HEAD的值讼昆,然后執(zhí)行g(shù)it reset 28d447f –hard命令,中間的28d447f替換成自己查找出來的值骚烧。git命令行記住用戶名和密碼
git config --global credential.helper store
先輸入該命令,然后再執(zhí)行其他git命令時(shí)輸入用戶名和密碼就會(huì)記住該用戶名和密碼了闰围。
記錄一次遇到的git問題:
強(qiáng)制將本地推到遠(yuǎn)程的分支
如果本地的版本是對(duì)的卦方,想用本地的分支替換掉遠(yuǎn)程的分支,可以先切到該本地分支泰佳,然后使用命令 :git push -u origin master -f 盼砍,其中“master”是目標(biāo)遠(yuǎn)程分支。
遠(yuǎn)程的git地址發(fā)生變更怎么修改逝她?
在項(xiàng)目文件夾中找到.git文件浇坐,然后打開里面的config文件,然后修改url參數(shù)黔宛。
附上廖雪峰的git講解:
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000