git学习入门~~~
創(chuàng)建版本庫(又名倉庫,repository),可以理解為一個倉庫,這個目錄里面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。
?
創(chuàng)建一個版本庫非常簡單,首先,選擇一個合適的地方,創(chuàng)建一個空目錄:
?
? <span style="color:#3366ff">1. $ mkdir learngit $ cd learngit $ pwd2. 初始化一個Git倉庫,使用git init命令。3. 添加文件到Git倉庫,分兩步:第一步,使用命令git add <file>,注意,可反復(fù)多次使用,添加多個文件;(多次add不同的文件)第二步,使用命令git commit,完成。(commit可以一次提交很多文件)4. 隨時掌握工作區(qū)的狀態(tài),使用git status命令。如果git status告訴你有文件被修改過,用git diff可以查看修改內(nèi)容。</span> 5. 穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本。要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。 git reset --hard commit_idgit reset --hard head^(回到上一個版本)git reset --hard 版本號(回到未來或過去都可以)6. 只是指針在變化:
7. 版本庫的管理
8.?為什么Git比其他版本控制系統(tǒng)設(shè)計得優(yōu)秀,因為Git跟蹤并管理的是修改,而非文件。
9.?場景1:當(dāng)你改亂了工作區(qū)某個文件的內(nèi)容,想直接丟棄工作區(qū)的修改時(還沒add之前),用命令git checkout -- file(--前后各有一個空格)。git checkout -- readme.txt
場景2:當(dāng)你不但改亂了工作區(qū)某個文件的內(nèi)容,還添加到了暫存區(qū)時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。git reset head readme.txt git checkout -- readme.txt
場景3:已經(jīng)提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節(jié),不過前提是沒有推送到遠程庫。
git ?reset --hard ?版本號
10.?
? ? vim test.txt(退出方式:i(表示插入),esc準(zhǔn)備退出。ZZ,保存并退出;:q!(不保存退出)
? ? ?git add test.txt ? ?git commit -m"add a new file"
? ? 想要從版本庫中刪掉該文件:git rm test.txt, git commit -m"delete the test.txt"
命令git rm用于刪除一個文件。如果一個文件已經(jīng)被提交到版本庫,那么你永遠不用擔(dān)心誤刪,但是要小心,你只能恢復(fù)文件到最新版本,你會丟失最近一次提交后你修改的內(nèi)容。
11. 遠程倉庫:
要關(guān)聯(lián)一個遠程庫,使用命令git remote add origin git@server-name:path/repo-name.git;(git remote add origin ....)關(guān)聯(lián)后,使用命令git push -u origin master第一次推送master分支的所有內(nèi)容;(git push -u origin master)此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;(git push origin master)此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;(git push origin master)?
分布式版本系統(tǒng)的最大好處之一是在本地工作完全不需要考慮遠程庫的存在,也就是有沒有聯(lián)網(wǎng)都可以正常工作,而SVN在沒有聯(lián)網(wǎng)的時候是拒絕干活的!當(dāng)有網(wǎng)絡(luò)的時候,再把本地提交推送一下就完成了同步,真是太方便了!
?
git和SVN的區(qū)別:
?
Git和SVN還是挺像的,都有提交,合并等操作
下面是區(qū)別:
1. Git是分布式的,SVN是集中式的,好處是跟其他同事不會有太多的沖突,自己寫的代碼放在自己電腦上,一段時間后再提交、合并,也可以不用聯(lián)網(wǎng)在本地提交;
2. Git下載下來后,在本地不必聯(lián)網(wǎng)就可以看到所有的log,很方便學(xué)習(xí),SVN卻需要聯(lián)網(wǎng);
3. Git鼓勵分Branch,而SVN,說實話,我用Branch的次數(shù)還挺少的,SVN自帶的Branch merge我還真沒用過,有merge時用的是Beyond Compare工具合并后再Commit的;
4. Tortoise也有出Git版本;
5. SVN在Commit前,我們都建議是先Update一下,跟本地的代碼編譯沒問題,并確保開發(fā)的功能正常后再提交,這樣其實挺麻煩的,有好幾次同事沒有先Updata,就Commit了,發(fā)生了一些錯誤,耽誤了大家時間,Git可能這種情況會少些。
參考博文:https://blog.csdn.net/a117653909/article/details/8952183
12. 遠程倉庫的克隆:
?
要克隆一個倉庫,首先必須知道倉庫的地址,然后使用git clone命令克隆。
Git支持多種協(xié)議,包括https,但通過ssh支持的原生git協(xié)議速度最快
13。 分支管理;
?
分支在實際中有什么用呢?假設(shè)你準(zhǔn)備開發(fā)一個新功能,但是需要兩周才能完成,第一周你寫了50%的代碼,如果立刻提交,由于代碼還沒寫完,不完整的代碼庫會導(dǎo)致別人不能干活了。如果等代碼全部寫完再一次提交,又存在丟失每天進度的巨大風(fēng)險。
現(xiàn)在有了分支,就不用怕了。你創(chuàng)建了一個屬于你自己的分支,別人看不到,還繼續(xù)在原來的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到開發(fā)完畢后,再一次性合并到原來的分支上,這樣,既安全,又不影響別人工作。
14. 創(chuàng)建合并分支:
?
Git鼓勵大量使用分支:
查看分支:git branch(git branch)
創(chuàng)建分支:git branch <name>(git checkout -b dev)
切換分支:git checkout <name>
創(chuàng)建+切換分支:git checkout -b <name>
合并某分支到當(dāng)前分支:git merge <name>(git merge dev)
刪除分支:git branch -d <name>(git branch -d dev)
?
15. 解決合并的沖突:
?
當(dāng)Git無法自動合并分支時,就必須首先解決沖突。解決沖突后,再提交,合并完成。
用git log --graph命令可以看到分支合并圖。
?
16. 不使用fast forword方式來合并分支:
?
17. bug分支管理:
?
修復(fù)bug時,我們可以通過創(chuàng)建新的bug分支進行修復(fù),然后合并,最后刪除;git checkout -b dev; git merge dev;
git checkout master;git branch -d dev
當(dāng)手頭工作沒有完成時,先把工作現(xiàn)場git stash一下,然后去修復(fù)bug,修復(fù)后,再git stash pop,回到工作現(xiàn)場
git stash ; git stash list; git stash pop;git stash list.
18. feature分支:
?
開發(fā)一個新feature,最好新建一個分支;git checkout -b dev; git add test.txt;git commit -m"add a test.txt";git checkout master;git merge dev之前
如果要丟棄一個沒有被合并過的分支,可以通過git branch -D <name>強行刪除。git branch -D dev(強行刪除)
?
19. 多人協(xié)作:
?
?
多人協(xié)作的工作模式通常是這樣:
首先,可以試圖用git push origin branch-name推送自己的修改;git push origin dev
如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合并;(如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關(guān)系沒有創(chuàng)建,用命令git branch --set-upstream branch-name origin/branch-name。)git branch --set-upstream dev origin/dev;git pull
如果合并有沖突,則解決沖突,并在本地提交;
沒有沖突或者解決掉沖突后,再用git push origin branch-name推送就能成功!git push origin dev
這就是多人協(xié)作的工作模式,一旦熟悉了,就非常簡單。
總結(jié):
?
-
查看遠程庫信息,使用git remote -v;
-
本地新建的分支如果不推送到遠程,對其他人就是不可見的;
-
從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠程的新提交;
-
在本地創(chuàng)建和遠程分支對應(yīng)的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致;
-
建立本地分支和遠程分支的關(guān)聯(lián),使用git branch --set-upstream branch-name origin/branch-name;
-
從遠程抓取分支,使用git pull,如果有沖突,要先處理沖突。
20.?創(chuàng)建標(biāo)簽
-
命令git tag <name>用于新建一個標(biāo)簽,默認為HEAD,也可以指定一個commit id;git tag v1.0 fedsf1
-
git tag -a <tagname> -m "blablabla..."可以指定標(biāo)簽信息;git tag -a v0.9 -m "add a new tag"
-
git tag -s <tagname> -m "blablabla..."可以用PGP簽名標(biāo)簽;
-
命令git tag可以查看所有標(biāo)簽。
?
?
21.?操作標(biāo)簽
?
-
命令git push origin <tagname>可以推送一個本地標(biāo)簽;git push origin v1.0
-
命令git push origin --tags可以推送全部未推送過的本地標(biāo)簽;git push origin --tags
-
命令git tag -d <tagname>可以刪除一個本地標(biāo)簽; git tag -d v1.0
-
命令git push origin :refs/tags/<tagname>可以刪除一個遠程標(biāo)簽git push origin :refs/tags/v1.0
22. 使用github
?
?
-
在GitHub上,可以任意Fork開源倉庫;fork之后使用:git clone git@github.com:linhj-james/learngit-1.git
git@github.com:linhj-james/learngit-1.git git@github.com:linhj-james/learngit-1.git -
自己擁有Fork后的倉庫的讀寫權(quán)限; pull request
-
可以推送pull request給官方倉庫來貢獻代碼。
?
23. 最后,供上版本管理常用命令:
git clone?git@github.com:linhj-james/learngit.git(你的遠程地址)
git init (初始化一個新建的倉庫)
git status (所在文件夾的文件狀態(tài))
git diff(顯示兩次文件的修改的不同之處)
git add (+filename)
git commit -m"add some chages"
git log(顯示記錄)
git branch (查看分支)
git checkout -b dev(新建并切換到另一個分支dev分支去)
git branch master (切換到master分支去)
git branch -d dev(刪除dev分支)、
git tag v1.0(貼上v1.0的標(biāo)簽)
?
git remote -v(查看遠程里連接的狀態(tài))
(git remote add origin (遠程倉庫地址))
git remote show <remote>(顯示remote的信息)
git pull <remote><branch>(看上面)
git fetch <remote>
git push <remote><branch>(git push origin maste)
?
git merge <branch>(dev)
git rm <resolved files>
git reset --hard head^
自己總結(jié)一下常用 的操作:
一。 .?上傳本地文件到github
步驟:
1. 先各自在遠程倉庫和本地倉庫建一個文件夾(倉庫)
2. git init(初始化倉庫)
3. git add (+文件名)
4. git commit -m"add a new file"
5.git remote -v(查看遠程倉庫的連接情況,把無關(guān)的git remote rm origin(移出掉))
6. git remote add origin (+遠程倉庫地址)(建立遠程倉庫)
?
7. git pull --rebase origin master
(
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase(創(chuàng)建一個新的虛擬提交R)(關(guān)于git merge和git rebase 的區(qū)別可以參考:https://www.cnblogs.com/kevingrace/p/5896706.html)
)
?
8. git push -u origin master(有時候會出錯,如果排除7的問題可以使用:git push -f origin master(利用本地分支去覆蓋遠程倉庫))
?
新手如何提交本地文件到github上,幾步走:
1、本地創(chuàng)建文件夾,創(chuàng)建本地倉庫,【git init】;
2、執(zhí)行【git add .】,將文件都提交到倉庫;
3、執(zhí)行【git commit -m "注釋語句"?】命令,將索引內(nèi)容添加到倉庫中;
4、在github上創(chuàng)建一個repository;
5、將本地的倉庫關(guān)聯(lián)到Github上,git remote add origin https://github.com/……(你的用戶名)/Test.git(你項目的名字)
6、上傳代碼到github遠程倉庫,git push -u origin master
?
二。 克隆:
git clone (+遠程倉庫地址)
?
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000(轉(zhuǎn)載博文)
?
?
?
總結(jié)
以上是生活随笔為你收集整理的git学习入门~~~的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中fuse_保险丝座中保险丝的材质,结构
- 下一篇: MySQL数据库知识点总结