git入門
參考:
1.https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
2.https://git-scm.com/book/zh/v2
目的
之前在windows上一直使用tortoise git所以一直沒有研究git 命令,現(xiàn)在新?lián)Q了mac,圖形工具支持不友好,系統(tǒng)學習了下相關文檔,總結學習到的內容
git解決的問題
- 每次修改一個東西,就怕把之前的改壞了,就需要不停的備份,所以需要記錄每次文件的改動,git為每次提交保存一個快照,能實時恢復
- 協(xié)作編輯編輯時經常需要很多人同時編輯,最后只能人工手動合并,git提供分支合并功能,且通過diff查看差異,幫助解決沖突和合并代碼
git的誕生
- 1991 Linus雖然創(chuàng)建了Linux
- 志愿者把源代碼文件通過diff的方式發(fā)給Linus,然后由Linus本人通過手工方式合并代碼
- Linus堅定地反對CVS和SVN,這些集中式的版本控制系統(tǒng)不但速度慢,而且必須聯(lián)網才能使用。有一些商用的版本控制系統(tǒng),雖然比CVS、SVN好用,但那是付費的,和Linux的開源精神不符
- 2002 BitKeeper的東家BitMover公司出于人道主義精神,授權Linux社區(qū)免費使用這個版本控制系統(tǒng)
- 2005 開發(fā)Samba的Andrew試圖破解BitKeeper的協(xié)議,BitMover收回免費使用權
- linus花了兩周時間自己用C寫了一個分布式版本控制系統(tǒng),這就是Git
- 2008 GitHub網站上線了,它為開源項目免費提供Git存儲
git和svn的區(qū)別
- git是分布式版本控制系統(tǒng),每個人的電腦上都是一個完整的版本庫,不同用戶只需要推修改,布式版本控制系統(tǒng)通常也有一臺充當“中央服務器”的電腦,但這個服務器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣干活,只是交換修改不方便而已。(強大的分支管理能力)
- git直接記錄快照,而非差異比較
- svn是集中式版本控制系統(tǒng),版本庫是集中存放在中央服務器的(必須聯(lián)網)
git初始化配置
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
配置全局的用戶名和郵箱,分布式服務必須指定自己的名稱
git名詞解釋
工作區(qū)
在電腦里能看到的目錄
文件狀態(tài)
- 已提交(committed) 已提交表示數(shù)據(jù)已經安全的保存在本地數(shù)據(jù)庫中
- 已修改(modified) 已修改表示修改了文件,但還沒保存到數(shù)據(jù)庫中。
- 已暫存(staged) 已暫存表示對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中。
版本庫
工作區(qū)有一個隱藏目錄.git,這個不算工作區(qū),而是Git的版本庫
image
- 在工作目錄中修改文件。
- 暫存文件,將文件的快照放入暫存區(qū)域。
- 提交更新,找到暫存區(qū)域的文件,將快照永久性存儲到 Git 倉庫目錄。
git本地倉庫常用命令
git help <verb> --查看幫助
git init --初始化git倉庫
git config --配置git信息
--global --配置全局參數(shù)
alias.co checkout --別名
color.ui true --顯示顏色
git add --將文件添加到提交目錄
git commit --提交add后的內容到本地倉庫
-m "wrote a readme file" --提交說明,必須攜帶
-a --跳過add,直接全部提交
--amend --重新提交
git status --查看倉庫狀態(tài),查看是否有文件被修改
git log --顯示從最近到最遠的日志
--pretty=oneline --一行顯示
-p --查看具體差距
-3 --查看最近幾次日志
--stat --簡要說明
git reset --回退版本號(此時使用git log將看不到后續(xù)commit日志)
head --當前版本
head^ --上一個版本,類推
head~ --上兩個版本
123124 --commitid前幾個數(shù)字,不重復即可
--mixed --默認,回退到你未add時的狀態(tài)
--hard --回退,但你的修改全部消失
--soft --回退到你add,但未commit的狀態(tài)
git reflog --記錄每一次的命令
git mv <oldname> <newname> --重命名,類似于rm+add
git diff --查看被修改的具體內容
--cached(staged) --
git checkout --撤銷工作區(qū)修改
-- file --指定文件(原先文件會消失)
git reset HEAD file --撤銷暫存區(qū)修改
git rm --刪除版本庫文件
--cached --刪除緩存,+push可以刪除遠程倉庫
ssh加密
.ssh目錄下創(chuàng)建id_rsa和id_rsa.pub
$ ssh-keygen -t rsa -C "youremail@example.com"
- id_rsa 私鑰
- id_rsa.pub 公鑰
git遠程倉庫常用命令
git remote add origin git@gitee.com:ziningmei/learngit.git --設置遠程倉庫
git remote --查看遠程庫
-v --更詳細信息
git clone --從遠程倉庫克隆一個本地庫
git分支命令
git checkout -b <name> --創(chuàng)建并切換分支(等同下兩個命令)
git branch --查看分支(*表示當前分支)
git branch <name> --創(chuàng)建分支
git checkout <name> --切換分支
git push origin -d <name> --將當前分支push到遠程分支
git fetch --將遠程的commit拉取到本地,但不會修改head
git pull --將遠程的commit拉取到本地,但會修改head指向最新的commit
--git fetch+git merge+git commit
git merge <name> --將dev合并到當前分支
--no-merged --未合并分支
git branch -d <name> --刪除分支
git push origin -d <name> --刪除遠程分支
git merge --no-ff -m "test" dev --強制禁用Fast forward模式,會生成一個commit
--ff模式刪除分支會丟掉分支信息
git rebase --類似于merge,rebase是把分支上每一次提交merge一次,需要
--處理多個沖突,且不會生成commit
git stash --暫時保存工作區(qū)(需要先git add)
git stash apply stash@{0} --恢復stash,并不刪除
git stash drop --刪除stash
git stash list --查看stash list
git stash pop --回復stash,并刪除
git標簽命令
git tag --查看的所有標簽
git check <name> --切換tag
git tag <name> <commitid> --對某個commit打標簽
-a --指定標簽名
-m --標簽說明
-d --刪除標簽
git show <tagname> --查看說明文字
git push origin <tagname> --將分支推到遠程倉庫
--tags --推送所有的tags
:refs/tags/<tagname> --遠程刪除標簽