版本控制(Revision control)是一種在開發(fā)的過程中用于管理我們對文件、目錄或工程等內(nèi)容的修改歷史,方便查看更改歷史記錄,備份以便恢復(fù)以前的版本的軟件工程技術(shù)。
簡單來說,版本控制就是用于管理多人協(xié)同開發(fā)項(xiàng)目的技術(shù)。下面要講的是一個(gè)名為Git的版本控制器。
Git的下載:直接在git官網(wǎng)下載的話可能會(huì)有點(diǎn)慢,推薦使用淘寶鏡像下載:CNPM Binaries Mirror
我的windows系統(tǒng),安裝起來直接下一步下一步的操作就可以了。
具體學(xué)習(xí)資料,可以到官方文檔上學(xué)習(xí)下,我總結(jié)了一些面試常問的相關(guān)知識(shí)點(diǎn),如果都掌握了,就基本沒有什么問題了。
1、Git是什么使用什么語言編寫的?
git使用的是C語言編寫的,git很快,c語言通過減少運(yùn)行的開銷來做到這一點(diǎn)。
2、git如何查看所有分支?
A. git status B. git reflog C. git branch -a D. git log
正確答案: C
3、 如何創(chuàng)建分支?
A. git branch 分支 B. git create 分支 C. git pull 分支 D. git push 分支
正確答案: A
4、 如何跳轉(zhuǎn)已經(jīng)存在的分支?
A. git checkout 分支名 B. git add 分支名 C. git push 文件名 D. git rm 文件名
正確答案: A
5、 使用git管理代碼如何推送到遠(yuǎn)程?
A. git add
B. git commit
C. git pull
D. git push origin master
正確答案: D
6、 git 查看提交日志的命令是?
A. git commit
B. git reflog
C. ssh-keygen
D. netstat -anp
正確答案: B
7、 在git中如何跳轉(zhuǎn)指定版本?
參考答案:
1. git reflog —查看日志
2、git reset –hard 版本號
8、 Git 和 SVN 有什么區(qū)別?
Git | SVN |
1. Git 是一個(gè)分布式的版本控制工具 | 1. SVN 是集中版本控制工具 |
2. 它屬于第 3 代版本控制工具 | 2. 它屬于第 2 代版本控制工具 |
3. 客戶端可以在其本地系統(tǒng)上克隆整個(gè)存儲(chǔ)庫 | 3. 版本歷史記錄存儲(chǔ)在服務(wù)器端的存儲(chǔ)庫中 |
4. 即使離線也可以提交 | 4. 只允許在線提交 |
5.Push/pull 操作更快 | 5.Push/pull 操作較慢 |
6. 工程可以用 commit 自動(dòng)共享 | 6. 沒有任何東西能自動(dòng)共享 |
9、 Git pull 和 Git fetch 有什么區(qū)別?
Git pull 命令從中央存儲(chǔ)庫中提取特定分支的信息更改或提交, 并更新本地存儲(chǔ)庫中的目標(biāo)分支.
Git fetch 也用于相同的目的, 但它的工作方式略有不同. 當(dāng)你執(zhí)行 Git fetch 時(shí), 它會(huì)從所需的分支中提取所有新提交, 并將其存儲(chǔ)在本地存儲(chǔ)庫中的新分支中. 如果要在目標(biāo)分支中反映這些更改, 必須在 Git fetch 之后執(zhí)行 Git merge. 只有在對目標(biāo)分支和獲取的分支進(jìn)行合并后才會(huì)更新目標(biāo)分支. 為了方便起見, 請記住以下等式:
Git pull = Git fetch Git merge
10. 什么是 Git stash?
首先應(yīng)該解釋 Git stash 的必要性.
通常情況下, 當(dāng)你一直在處理項(xiàng)目的某一部分時(shí), 如果你想要在某個(gè)時(shí)候切換分支去處理其他事情, 事情會(huì)處于混亂的狀態(tài). 問題是, 你不想把完成了一半的工作的提交, 以便你以后就可以回到當(dāng)前的工作. 解決這個(gè)問題的答案是 Git stash.
再解釋什么是 Git stash.
stash 會(huì)將你的工作目錄, 即修改后的跟蹤文件和暫存的更改保存在一堆未完成的更改中, 你可以隨時(shí)重新應(yīng)用這些更改
常用命令總結(jié):
# 提交修改三步 add ,commit, push.Git pull
拉取資源。
# 切換回 devGit checkout dev###################Git 檢出其他分支的某個(gè)文件到當(dāng)前分支并提交 ############Git checkout **.javaGit statusGit add **.javaGit commit -m ''Git pushGit lg#############Git 如何讓單個(gè)文件回退到指定的版本 ########1. 進(jìn)入到文件所在文件目錄, 或者能找到文件的路徑, 查看文件的修改記錄
回退到指定的版本
#3. 提交到本地參考Git commit -m "注釋"#4. 更新到工作目錄Git checkout **.java#5. 提交到遠(yuǎn)程倉庫Git push origin master#6. 撤銷回退到合并之前的遠(yuǎn)程 dev 版本Git reset --hard dev#7. 顯示提交更改內(nèi)容Git show
還有一些很有用但是不常用的命令:
git log -p -1 查詢最近一次的文件更改.
git diff 查看已暫存和未暫存修改
git rm fileName 從 Git 倉庫中刪除
git reset HEAD README.md 可以取消暫存, 再次查看文件狀態(tài)被修改的文件變成 unstaged 狀態(tài)
添加遠(yuǎn)程倉庫:
Git remote add <libraryName> <url>$ Git remote add test https://libraryUrl/demo/demo.Git$ Git remoteorigintest
遠(yuǎn)程倉庫中抓取與拉取
$ Git fetch [remote-name]
這個(gè)命令會(huì)訪問遠(yuǎn)程倉庫, 從中拉取所有你還沒有的數(shù)據(jù). 執(zhí)行完成后, 你將會(huì)擁有那個(gè)遠(yuǎn)程倉庫中所有分支的引用, 可以隨時(shí)合并或查看.
推送到遠(yuǎn)程倉庫
Git push [remote-name] [branch-name]
, 下面是推送當(dāng)前分支到遠(yuǎn)程的 master 分支
$ Git push origin master
打標(biāo)簽
像其他版本控制系統(tǒng) (VCS) 一樣, Git 可以給歷史中的某一個(gè)提交打上標(biāo)簽, 以示重要.
查看所有標(biāo)簽 Git tag。
git cherry-pick
命令git cherry-pick 通常用于把特定提交從存儲(chǔ)倉庫的一個(gè)分支引入到其他分支中。常見的用途是從維護(hù)的分支到開發(fā)分支進(jìn)行向前或回滾提交。
合并(merge) 變基(rebase)
forking的工作流程的優(yōu)點(diǎn)
它不是用單個(gè)服務(wù)端倉庫充當(dāng)“中央”代碼庫,而是為每個(gè)開發(fā)者提供自己的服務(wù)端庫。forking工作流程最常用于公共開源項(xiàng)目中。
Forking工作流程的主要優(yōu)點(diǎn)是可以匯集提交貢獻(xiàn),又無需每個(gè)開發(fā)者提交到一個(gè)中央倉庫中,從而實(shí)現(xiàn)干凈的項(xiàng)目歷史記錄。開發(fā)者可以推送代碼到自己的服務(wù)端倉庫,而只有項(xiàng)目維護(hù)人員直接推送代碼到官方倉庫中。
當(dāng)開發(fā)者準(zhǔn)備發(fā)布本地提交時(shí),他們的提交會(huì)推送到自己的公共倉庫中,而不是官方倉庫中。 需要發(fā)布則提交合并請求,他們向主倉庫請求拉取(pull request),項(xiàng)目維護(hù)人員(合并人)還可以對項(xiàng)目進(jìn)行審核更新。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。