由于git的使用通常伴隨著linux的常用指令,因此下面記得也有l(wèi)inux常用的操作,如果學(xué)習(xí)git確實應(yīng)該也學(xué)習(xí)下linux
- mkdir 文件名 創(chuàng)建目錄
- cd 目錄 用來定位目錄,這一點覺得比win要好很多,有時候一行代碼就能到達(dá)。注意目錄之間的分割用/既是和問號在一起的那個鍵。我自己常常分不清/和\特來聲明一下。
- ls 顯示當(dāng)前目錄下的文件夾。
- ls -ah 顯示包括隱藏目錄
- pwd 顯示當(dāng)前目錄
- git init 把這個目錄變成git可以管理的倉庫。
- git add 文件名 把文件添加到倉庫
- git commit 把文件提交到倉庫
- 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)前倉庫的狀態(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表示上一個版本,同理HEAD^表示上上個版本,HEAD~100,是往上一百個版本的意思,也可以git reset --hard 版本號的前幾位。git reflog 用來記錄每一次的命令。同樣可以查詢版本號,以進(jìn)行恢復(fù)。 - 廖雪峰老師的圖?
前面講了我們把文件往Git版本庫里添加的時候,是分兩步執(zhí)行的:第一步是用git add把文件添加進(jìn)去,實際上就是把文件修改添加到暫存區(qū);
第二步是用git commit提交更改,實際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支。
因為我們創(chuàng)建Git版本庫時,Git自動為我們創(chuàng)建了唯一一個master分支,所以,現(xiàn)在,git commit就是往master分支上提交更改。
你可以簡單理解為,需要提交的文件修改通通放到暫存區(qū),然后,一次性提交暫存區(qū)的所有修改。
- 使用git diff HEAD -- 文件名 查看工作區(qū)和版本庫里面最新的區(qū)別
- git checkout -- 文件名 在提交之前可以使文件恢復(fù)到上一個階段,如果是還沒有添加到版本庫的暫存區(qū),即是修改后還沒有放進(jìn)暫存區(qū),現(xiàn)在撤銷就可以和版本庫一樣,如果是已經(jīng)添加到版本庫,又做了修改現(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:賬號名字/倉庫名字.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 刪除所需要刪除的分支
- 如果遇到了分支和主分支都修改會遇到合并沖突的提示,這時打開沖突文件,進(jìn)行修改再add commit即可
- git log --graph --pretty=oneline --abbrev-commit 以圖象顯示分支及其運(yùn)行情況。
-
git merge --no-ff -m "comit" brachname 使用遞歸戰(zhàn)略進(jìn)行合并,會在log里面看到分支情況,而在fast forward 中是看不出合并的commit是在這種模式下合并會生成一個commit,而-m就是描述這種commit的
分支策略意義 - git stash 用來儲藏當(dāng)前的工作現(xiàn)場,等以后恢復(fù)現(xiàn)場后繼續(xù)工作
- 工作區(qū)的恢復(fù)可以用git stash apply 進(jìn)行恢復(fù),但是并不刪除stash,需要用git stash drop來刪除stash內(nèi)容
- 同時恢復(fù)也有另一種方式,git stash pop,既是恢復(fù)的時候把stash的內(nèi)容刪除。
- 強(qiáng)行刪除未合并的分支 git branch -D branch-name
- 查看遠(yuǎn)程倉庫的信息 git remote
詳細(xì)信息 git remote -v - git push origin branchname 推送其他分支
- dev分支是開發(fā)分支,團(tuán)隊所有成員都要在上面工作,當(dāng)你的另一個小伙伴從遠(yuǎn)程庫clone時,默認(rèn)情況下只能看到本地的master分支,如果這位小伙伴要在dev上開發(fā),就必須創(chuàng)建遠(yuǎn)程origin的dev分支到本地,git checkout -b dev origin/dev
- 從本地創(chuàng)建和遠(yuǎn)程分支對應(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)簽不是按時間順序列出,而是按字母進(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
- 密鑰暫時空出
- 刪除標(biāo)簽 git tag -d tagname
- 推送某個標(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
- 如何參加開源項目,可以在GitHub上fork就在克隆一個倉庫,然從自己的clone git clone git@github.com:usersname/repositoriesname.git **一定要從自己的賬號下克隆,這樣你才能修改。平時的修改你可以往自己的倉庫里面修改,如果你想官方接受你的修改,可以在github上發(fā)起一個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ū)這樣可以配置一個別名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倉庫下使用
注意,這些配置文件都在.git/config 中的[alias]后面,要刪除別名,把對應(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配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中
'''
$ cat .gitconfig
[alias]
co = checkout
ci = commit
br = branch
st = status
[user]
name = Your Name
email = your@email.com
'''
配置別名也可以直接修改這個文件,如果改錯了,可以刪除文件重新進(jìn)行命令配置 - git服務(wù)器暫時不展開
第一次結(jié)束線