這里推薦廖雪峰的git教程土全,淺顯易懂酷含,循序漸進(jìn)邦泄。
https://www.liaoxuefeng.com/wiki/896043488029600
還有對git與svn的比較
https://www.cnblogs.com/Sungeek/p/9152223.html
1. 創(chuàng)建版本庫
通過git init把某個(gè)目錄變?yōu)镚it可以管理的倉庫这难,執(zhí)行完會發(fā)現(xiàn)目錄下多了.git文件仔燕。這個(gè)文件記錄著該工作區(qū)的版本庫造垛。
$ git init
2.修改文件后嘗試提交版本庫
$ git status //查看文件變更狀態(tài)
$ git diff HEAD -- <file> //查看本地工作區(qū)和版本庫最新版本的區(qū)別
$ git add <file> //提交到暫存區(qū)
$ git commit -m "xxxxx" //提交到版本庫,-m后面輸入的是本次提交的說明
若要丟棄某些修改
$ git checkout -- <file> //丟棄工作區(qū)的修改
//這里有兩種情況:
//1.自修改后還沒有被放到暫存區(qū)晰搀,撤銷修改就回到和版本//庫一模一樣的狀態(tài)五辽;
//2. 已經(jīng)添加到暫存區(qū)后,又作了修改外恕,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)
$ git reset HEAD <file> //丟棄暫存區(qū)的修改杆逗,將修改撤回的工作區(qū)
3. 版本回退
查看版本庫信息
$ git log //查看版本庫信息
$ git log --pretty=oneline //查看版本庫信息,以一行顯示
$ git reflog //記錄每一次命令鳞疲,包括記錄和回退
回退
在Git中罪郊,用HEAD表示當(dāng)前版本,上一個(gè)版本就是HEAD^
尚洽,上上一個(gè)版本就是HEAD^^
悔橄,當(dāng)然往上100個(gè)版本可寫成HEAD~100
$ git reset --hard HEAD^ //回退到上一個(gè)版本
$ git reset --hard 1094a //回退到某一個(gè)版本,commit ID的前幾位
4.將本地文件推送到遠(yuǎn)程github倉庫
//首先在github上建立一個(gè)learngit遠(yuǎn)程庫,再與本地關(guān)聯(lián)癣疟。
$ git remote add orign git@github.com:xxxxx/learngit.git
//orign遠(yuǎn)程倉庫的名字挣柬,默認(rèn)
//com:個(gè)人賬戶名
$ git push -u name master // 將本地庫推送到遠(yuǎn)程庫orign上的master分支,
//第一次加-u參數(shù)
從遠(yuǎn)程克隆倉庫到本地
$ git clone git@github.com:michaelliao/gitskills.git //使用ssh
$ git clone https://github.com/michaelliao/gitskills.git //使用http
更新遠(yuǎn)程倉庫的代碼
git pull
5.分支管理
$ git branch //查看分支
$ git branch <name> //創(chuàng)建分支
$ git checkout <name>//切換分支
$ git switch <name> //切換分支
$ git checkout -b <name> //創(chuàng)建+切換分支
$ git switch -c <name> //創(chuàng)建+切換分支
$ git branch -d <name> //刪除分支
$ git merge <name> //合并某分支到當(dāng)前分支
$ git merge --no-ff -m "merge with no-ff" dev
//強(qiáng)制禁用Fast forward模式
$ git push origin <name>// 將本地分支推送到遠(yuǎn)程
6.解決沖突
假設(shè)master分支要合并dev分支睛挚,但發(fā)生沖突邪蛔。這時(shí)候Git用<<<<<<<,=======扎狱,>>>>>>>
標(biāo)記出不同分支的內(nèi)容侧到,如:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> dev
手動修改沖突后,在master分支上上傳淤击,之后再進(jìn)行merge床牧。
可以使用帶參數(shù)的git log 來看分支情況。
$ git log --graph --pretty=oneline --abbrev-commit
7. Bug分支
假設(shè)接到一個(gè)bug或其他任務(wù)遭贸,但當(dāng)前工作還未做完戈咳,可以先將當(dāng)前修改儲存,等修完bug壕吹,再釋放出來著蛙。
$ git stash //執(zhí)行完后,git status工作區(qū)就是干凈的耳贬。
$ git stash list //查看存儲了那些stash
$ git stash pop //釋放并刪除stash
如果只想復(fù)制某次commit踏堡,而不想merge整個(gè)項(xiàng)目。
$ git cherry-pick <commit> //將某次commit復(fù)制到當(dāng)前分支
8.標(biāo)簽
$ git tag <tagname> //給當(dāng)前分支打一個(gè)標(biāo)簽
$ git show <tagname> //查看該標(biāo)簽的信息
$ git tag -a <tagname> -m "xxxxxx" 1094adb
//給某次commit創(chuàng)建帶有說明的標(biāo)簽咒劲,
//-a創(chuàng)建標(biāo)簽顷蟆,-m添加說明
$ git tag -d <tagname> //刪除標(biāo)簽
$ git push origin <tagname> //將某個(gè)標(biāo)簽推送到遠(yuǎn)程
$ git push origin :refs/tags/<tagname>//可以刪除一個(gè)遠(yuǎn)程標(biāo)簽。
標(biāo)簽總是和某個(gè)commit掛鉤腐魂。如果這個(gè)commit既出現(xiàn)在master分支帐偎,又出現(xiàn)在dev分支,那么在這兩個(gè)分支上都可以看到這個(gè)標(biāo)簽蛔屹。
9. 忽略某些文件
在倉庫目錄下新建一個(gè)名為.gitignore的文件,并推送到遠(yuǎn)程削樊,則該倉庫的開發(fā)者共享一套忽略規(guī)則。
注意:一定要在push文件之前創(chuàng)建好.gitignore文件兔毒,不然一些文件已經(jīng)上傳了漫贞,git就無法忽略了。
'#' 以'#'開始的行育叁,被視為注釋.
# 忽略掉所有文件名是 foo.txt的文件.
foo.txt
# 忽略所有生成的 html文件,
*.html
# foo.html是手工維護(hù)的迅脐,所以例外.
!foo.html
# 忽略所有.o和 .a文件.
*.[oa]
配置語法:
以斜杠“/”開頭表示目錄;
以星號“*”通配多個(gè)字符豪嗽;
以問號“?”通配單個(gè)字符
以方括號“[]”包含單個(gè)字符的匹配列表谴蔑;
以嘆號“!”表示不忽略(跟蹤)匹配到的文件或目錄豌骏;
有時(shí)候想添加某些文件發(fā)現(xiàn)添加不了,可能是被忽略了树碱】鲜剩可以強(qiáng)制添加或者去檢驗(yàn).gitignore的規(guī)則
$ git add -f App.class
$ git check-ignore -v App.class
.gitignore:3:*.class App.class #表示第三行規(guī)則忽略了.class文件