一酿傍、GitHub 體驗(yàn)
1烙懦、初始化本地git
git init
2、配置用戶名
git config --global user.name "<your nickName>"
3赤炒、配置郵箱
git config --global user.email "<your email address>"
4氯析、查看倉庫狀態(tài)
git status
Tips:支持中文文件名
git config --global core.quotepath false
5、提交本地倉庫
git add .
git commit -m"【Git】[Git 常用操作及原理]"
6莺褒、關(guān)聯(lián)遠(yuǎn)程倉庫
git remote add origin <your git repository address>
7掩缓、保持Github 同步
git pull
如果出現(xiàn)這種情況:
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> master
解決方式:
git branch --set-upstream-to=origin/master master
如果出現(xiàn)這種情況:
refusing to merge unrelated histories
解決方式:
git pull --allow-unrelated-histories
8、推送到遠(yuǎn)程倉庫
git push -u origin master
Tips:記得去GitHub秘鑰管理那里添加公鑰遵岩,增加寫權(quán)限
* 先從GitHub上初始化倉庫你辣,再clone到本地不會(huì)這么麻煩巡通,clone下來之后配置下用戶名和郵箱就可以用了
9、暫存
10舍哄、合并某個(gè)提交
二宴凉、常用操作
1、分支
1.1 簽出分支
git checkout <branchName>
1.2 切換分支
git checkout <branchName>
1.3 創(chuàng)建分支
git branch <branchName>
1.4 合并分支
git merge <branchName>
git merge --no-ff -m <branchName> 禁用快速合并(Fast-forward)
1.5 刪除本地分支
git branch -d <branchName>
2表悬、遠(yuǎn)程
2.1 查看遠(yuǎn)程分支信息
git remote -vv
2.2 刪除遠(yuǎn)程分支
git push origin --delete <branchName>
2.3 推送本地分支到遠(yuǎn)程弥锄,遠(yuǎn)程沒有的話會(huì)自動(dòng)創(chuàng)建
git push origin develop:develop
2.4 新建分支,并刪除蟆沫、推送到 遠(yuǎn)程倉庫:
git checkout -b 1.6.0
git push origin -d release/1.6.0
git push origin 1.6.0:release/1.6.0
3籽暇、tag
Git 主要使用兩種類型的標(biāo)簽:輕量標(biāo)簽(lightweight)與附注標(biāo)簽(annotated)
3.1 輕量標(biāo)簽:
一個(gè)輕量標(biāo)簽很像一個(gè)不會(huì)改變的分支 - 它只是一個(gè)特定提交的引用。(這點(diǎn)與svn不同svn的標(biāo)簽是會(huì)移動(dòng)的)
3.2 附注標(biāo)簽:
是存儲(chǔ)在 Git 數(shù)據(jù)庫中的一個(gè)完整對(duì)象饥追。 它們是可以被校驗(yàn)的图仓;其中包含打標(biāo)簽者的名字、電子郵件地址但绕、日期時(shí)間救崔;還有一個(gè)標(biāo)簽信息;并且可以使用 GNU Privacy Guard (GPG)簽名與驗(yàn)證捏顺。 通常建議創(chuàng)建附注標(biāo)簽六孵,這樣你可以擁有以上所有信息;但是如果你只是想用一個(gè)臨時(shí)的標(biāo)簽幅骄,或者因?yàn)槟承┰虿幌胍4婺切┬畔⒔僦希p量標(biāo)簽也是可用的
3.3 具體用法
4、版本操作
4.1 撤銷(git push 前)
4.1.1 git add 之前
git checkout -- filename來撤銷修改
git checkout -- .
4.1.2 git add 后
git reset HEAD 【filename】不加路勁則回撤全部
git checkout fileName
4.1.3 git commit 后
git reset [--hard|soft|mixed|merge|keep] [commit|HEAD]
soft
mixed
hard
4.2 回滾(git push 后)
4.2.1 打了tag的
git checkout <tag>
4.2.2 回到當(dāng)前HEAD
git checkout <branch_name>
4.2.3 撤銷指定文件到指定版本
git checkout <commitID> <filename>
4.2.4 刪除最后一次遠(yuǎn)程提交
方式一:使用revert
git revert HEAD
git push origin master
方式二:使用reset
git reset --hard HEAD^
git push origin master -f
- 二者區(qū)別:
revert是放棄指定提交的修改拆座,但是會(huì)生成一次新的提交主巍,需要填寫提交注釋,以前的歷史記錄都在挪凑;
reset是指將HEAD指針指到指定提交孕索,歷史記錄中不會(huì)出現(xiàn)放棄的提交記錄。
4.2.5 回滾某次提交
git revert commitID
4.2.6 刪除某次提交
git rebase -i "5b3ba7a"^
5躏碳、顯示差異
git diff
5.1 比較工作區(qū)與暫存區(qū)
git diff 不加參數(shù)即默認(rèn)比較工作區(qū)與暫存區(qū)
5.2 比較暫存區(qū)與最新本地版本庫(本地庫中最近一次commit的內(nèi)容)
git diff --cached [<path>...]
5.3 比較工作區(qū)與最新本地版本庫
git diff HEAD [<path>...] 如果HEAD指向的是master分支搞旭,那么HEAD還可以換成master
5.4 比較工作區(qū)與指定commit-id的差異
git diff commit-id [<path>...]
5.5 比較暫存區(qū)與指定commit-id的差異
git diff --cached [<commit-id>] [<path>...]
5.6 比較兩個(gè)commit-id之間的差異
git diff [<commit-id>] [<commit-id>]
5.7 使用git diff打補(bǔ)丁
git diff > patch
patch的命名是隨意的,不加其他參數(shù)時(shí)作用是當(dāng)我們希望將我們本倉庫工作區(qū)的修改拷貝一份到其他機(jī)器上使用菇绵,但是修改的文件比較多肄渗,拷貝量比較大,此時(shí)我們可以將修改的代碼做成補(bǔ)丁咬最,之后在其他機(jī)器上對(duì)應(yīng)目錄下使用 git apply patch 將補(bǔ)丁打上即可.
git diff --cached > patch 是將我們暫存區(qū)與版本庫的差異做成補(bǔ)丁
git diff --HEAD > patch 是將工作區(qū)與版本庫的差異做成補(bǔ)丁
git diff Testfile > patch 將單個(gè)文件做成一個(gè)單獨(dú)的補(bǔ)丁
git apply patch 應(yīng)用補(bǔ)丁翎嫡,應(yīng)用補(bǔ)丁之前我們可以先檢驗(yàn)一下補(bǔ)丁能否應(yīng)用,git apply --check patch 如果沒有任何輸出永乌,那么表示可以順利接受這個(gè)補(bǔ)丁
另外可以使用git apply --reject patch將能打的補(bǔ)丁先打上钝的,有沖突的會(huì)生成.rej文件翁垂,此時(shí)可以找到這些文件進(jìn)行手動(dòng)打補(bǔ)丁
6、日志
git log -n
7硝桩、查看倉庫狀態(tài)
git status
8沿猜、提交
提交到本地代碼庫,一般分兩步:
-
第一步
git add .
-
第二步
git commit -m"" git commit --amend
9碗脊、從遠(yuǎn)程倉庫更新
9.1 拉取
git fetch
更新git remote 中所有的遠(yuǎn)程倉庫所包含分支的最新commit-id, 將其記錄到.git/FETCH_HEAD文件中
9.2 拉取并自動(dòng)合并
git pull
相當(dāng)于 git fetch和git merge
10啼肩、推送本地提交到遠(yuǎn)程倉庫
git push
11、文件夾 (release)
git checkout -b 1.6.0
git push origin -d release/1.6.0
git push origin 1.6.0:release/1.6.0
12衙伶、處理git庫中untracked files
git clean -nxfd # 連 gitignore 的untrack 文件/目錄也一起刪掉 (慎用祈坠,一般這個(gè)是用來刪掉編譯出來的 .o之類的文件用的)
git clean -nf # 刪除 untracked files
git clean -nfd # 連 untracked 的目錄也一起刪掉
三、原理
1矢劲、暫存區(qū)
理解Git的暫存區(qū)(stage 或 index)如下圖所示赦拘,左側(cè)是工作區(qū)(working directory),右側(cè)是版本庫(Repository)芬沉,每次add某個(gè)文件時(shí)躺同,就會(huì)存放在版本庫的stage,commit后才真正的提交到本地的版本庫中丸逸,默認(rèn)git init時(shí)蹋艺,會(huì)創(chuàng)建一個(gè)master分支,以及一個(gè)指向master的指針Head黄刚。
四捎谨、Gitlab 服務(wù)器的搭建
- 待補(bǔ)~