由于git的使用通常伴隨著linux的常用指令,因此下面記得也有l(wèi)inux常用的操作摊溶,如果學(xué)習(xí)git確實(shí)應(yīng)該也學(xué)習(xí)下linux
- mkdir 文件名 創(chuàng)建目錄
- cd 目錄 用來定位目錄,這一點(diǎn)覺得比win要好很多充石,有時(shí)候一行代碼就能到達(dá)莫换。注意目錄之間的分割用/既是和問號(hào)在一起的那個(gè)鍵。我自己常常分不清/和\特來聲明一下骤铃。
- ls 顯示當(dāng)前目錄下的文件夾拉岁。
- ls -ah 顯示包括隱藏目錄
- pwd 顯示當(dāng)前目錄
- git init 把這個(gè)目錄變成git可以管理的倉(cāng)庫(kù)。
- git add 文件名 把文件添加到倉(cāng)庫(kù)
- git commit 把文件提交到倉(cāng)庫(kù)
- git commit 相當(dāng)于快照惰爬。
- git commit -m "提交聲明"
注意喊暖,git commit 可以一次多次提交很多文件,故可以進(jìn)行以下的操作
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."**
- git status 用來查看當(dāng)前倉(cāng)庫(kù)的狀態(tài)
- git diff 查看difference
- git log 進(jìn)行查看歷史記錄(已經(jīng)commit)
- 顯示的是從最近到最遠(yuǎn)
- 如果嫌亂可以 git log --pretty=oneline
- git reset 回退版本
-git reset --hard HEAD HEAD表示當(dāng)前版本撕瞧,而HEAD表示上一個(gè)版本陵叽,同理HEAD^表示上上個(gè)版本狞尔,HEAD~100,是往上一百個(gè)版本的意思,也可以git reset --hard 版本號(hào)的前幾位巩掺。git reflog 用來記錄每一次的命令偏序。同樣可以查詢版本號(hào),以進(jìn)行恢復(fù)胖替。 - 廖雪峰老師的圖?
前面講了我們把文件往Git版本庫(kù)里添加的時(shí)候研儒,是分兩步執(zhí)行的:第一步是用git add把文件添加進(jìn)去,實(shí)際上就是把文件修改添加到暫存區(qū)独令;
第二步是用git commit提交更改端朵,實(shí)際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支。
因?yàn)槲覀儎?chuàng)建Git版本庫(kù)時(shí)燃箭,Git自動(dòng)為我們創(chuàng)建了唯一一個(gè)master分支冲呢,所以,現(xiàn)在遍膜,git commit就是往master分支上提交更改碗硬。
你可以簡(jiǎn)單理解為,需要提交的文件修改通通放到暫存區(qū)瓢颅,然后恩尾,一次性提交暫存區(qū)的所有修改。
- 使用git diff HEAD -- 文件名 查看工作區(qū)和版本庫(kù)里面最新的區(qū)別
- git checkout -- 文件名 在提交之前可以使文件恢復(fù)到上一個(gè)階段挽懦,如果是還沒有添加到版本庫(kù)的暫存區(qū)翰意,即是修改后還沒有放進(jìn)暫存區(qū),現(xiàn)在撤銷就可以和版本庫(kù)一樣信柿,如果是已經(jīng)添加到版本庫(kù)冀偶,又做了修改現(xiàn)在撤銷修改就可以回到添加到暫存區(qū)后的狀態(tài)注意只能恢復(fù)一次
- 如果是修改后還git add 到暫存區(qū)了,可以這樣做渔嚷,git reset HEAD 文件名 把暫存區(qū)的修改回退到工作區(qū)进鸠,然后再用git checkout -- 文件名 丟棄工作區(qū)的修改。
- 刪除功能已經(jīng)add的文件如果被刪除了形病,如果你也想刪除客年,使用git rm 文件名 然后commit, 如果是誤刪想要恢復(fù),可以git checkout -- 文件名
- github常用命令
- ssh-krygen -t rsa -C "郵箱地址" 在用戶主目錄下看有沒有.ssh目錄漠吻,如果沒有量瓜,執(zhí)行上面命令
- git push origin master 推送到github
第一次推送用git push -u origin master
以后用git push origin master - 從遠(yuǎn)端復(fù)制 git clone git@github.com:賬號(hào)名字/倉(cāng)庫(kù)名字.git
- git branch branchname 創(chuàng)建分支
- git checkout branchname 切換分支
- git checkout -b file name 創(chuàng)建name分支并且切換到name分支
- git branch 列出所有分支,并且在當(dāng)前分支做標(biāo)記途乃。
- git checkout branchname 切換分支
- git merge branchname 快速合并分支內(nèi)容到當(dāng)前分支绍傲。需是已經(jīng)commit過的
- git branch -d branchname 刪除所需要?jiǎng)h除的分支
- 如果遇到了分支和主分支都修改會(huì)遇到合并沖突的提示,這時(shí)打開沖突文件耍共,進(jìn)行修改再add commit即可
- git log --graph --pretty=oneline --abbrev-commit 以圖象顯示分支及其運(yùn)行情況烫饼。
-
git merge --no-ff -m "comit" brachname 使用遞歸戰(zhàn)略進(jìn)行合并猎塞,會(huì)在log里面看到分支情況,而在fast forward 中是看不出合并的commit是在這種模式下合并會(huì)生成一個(gè)commit枫弟,而-m就是描述這種commit的
分支策略意義 - git stash 用來儲(chǔ)藏當(dāng)前的工作現(xiàn)場(chǎng)邢享,等以后恢復(fù)現(xiàn)場(chǎng)后繼續(xù)工作
- 工作區(qū)的恢復(fù)可以用git stash apply 進(jìn)行恢復(fù),但是并不刪除stash淡诗,需要用git stash drop來刪除stash內(nèi)容
- 同時(shí)恢復(fù)也有另一種方式骇塘,git stash pop,既是恢復(fù)的時(shí)候把stash的內(nèi)容刪除。
- 強(qiáng)行刪除未合并的分支 git branch -D branch-name
- 查看遠(yuǎn)程倉(cāng)庫(kù)的信息 git remote
詳細(xì)信息 git remote -v - git push origin branchname 推送其他分支
- dev分支是開發(fā)分支韩容,團(tuán)隊(duì)所有成員都要在上面工作款违,當(dāng)你的另一個(gè)小伙伴從遠(yuǎn)程庫(kù)clone時(shí),默認(rèn)情況下只能看到本地的master分支群凶,如果這位小伙伴要在dev上開發(fā)插爹,就必須創(chuàng)建遠(yuǎn)程origin的dev分支到本地,git checkout -b dev origin/dev
- 從本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支 git checkout -b branchname origin/branchname
- 從遠(yuǎn)程抓取分支 git pull
- 使用git tag 標(biāo)簽名 在需要打分支的分支進(jìn)行打標(biāo)簽请梢,默認(rèn)標(biāo)簽是打在最新提交的commit上的赠尾。
- 如果是忘了打標(biāo)簽,可以找到歷史提交的commit id然后打上就可以了毅弧,git log --pretty=oneline --abbrev-commit 然后git tag 標(biāo)簽 commit id
- 注意標(biāo)簽不是按時(shí)間順序列出气嫁,而是按字母進(jìn)行排序,git show tagname
- git tag 查看所有標(biāo)簽
- 創(chuàng)建帶有說明的標(biāo)簽 用-a指定標(biāo)簽名够坐,-m指定說明文字 git tag -a tagname -m "message" commit id
- 密鑰暫時(shí)空出
- 刪除標(biāo)簽 git tag -d tagname
- 推送某個(gè)標(biāo)簽到遠(yuǎn)程 git push origin tagname
- git push origin --tags 一次性推送全部尚未推送到遠(yuǎn)程的本地標(biāo)簽
- 如果想刪除已經(jīng)推送到遠(yuǎn)程的標(biāo)簽 先從本地刪除寸宵,然后從遠(yuǎn)程刪除,命令也是push git push origin :refs/tags/tagname
- 如何參加開源項(xiàng)目元咙,可以在GitHub上fork就在克隆一個(gè)倉(cāng)庫(kù)梯影,然從自己的clone git clone git@github.com:usersname/repositoriesname.git **一定要從自己的賬號(hào)下克隆,這樣你才能修改庶香。平時(shí)的修改你可以往自己的倉(cāng)庫(kù)里面修改甲棍,如果你想官方接受你的修改,可以在github上發(fā)起一個(gè)pull request赶掖。
- git 的日常配置救军,使用git config --global color.ui true
- 配置別名 git config --global alias.st status 既是st以后表示成status
先列舉幾種“偷懶”好方法
ststatuscheckout
co
cicommitbranch
br
git reset HEAD file 可以把暫存區(qū)的修改撤銷掉(unstage)重新放回工作區(qū)這樣可以配置一個(gè)別名git config --global alias.unstage 'reset HEAD'
把lg配置成了:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
廖老師的圖 - --global參數(shù)是全局參數(shù),這些命令可以在所有的git倉(cāng)庫(kù)下使用
注意倘零,這些配置文件都在.git/config 中的[alias]后面,要?jiǎng)h除別名戳寸,把對(duì)應(yīng)行刪除就好了
'''
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git@github.com:michaelliao/learngit.git
fetch = +refs/heads/:refs/remotes/origin/
[branch "master"]
remote = origin
merge = refs/heads/master
[alias]
last = log -1
'''
而當(dāng)前用戶的git配置文件放在用戶主目錄下的一個(gè)隱藏文件.gitconfig中
'''
$ cat .gitconfig
[alias]
co = checkout
ci = commit
br = branch
st = status
[user]
name = Your Name
email = your@email.com
'''
配置別名也可以直接修改這個(gè)文件呈驶,如果改錯(cuò)了,可以刪除文件重新進(jìn)行命令配置 - git服務(wù)器暫時(shí)不展開
第一次結(jié)束線