Gitgit
demo
環境: Ubuntu github
sudo apt-get install git
$ mkdir learngit $ cd learngit $ git init
初始化空的 Git 版本庫於 /home/administrator/文檔/learngit/.git/shell
空倉庫建好了app
將文本文件添加至 版本庫ssh
$ git add readme.txt
--能夠屢次添加/一次添加多個文件(空格分割)fetch
用命令git commit告訴Git,把文件提交到倉庫:ui
$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme filethis
1 file changed, 2 insertions(+)spa
create mode 100644 readme.txt命令行
-m後面輸入的是本次提交的說明
$ git status 掌握倉庫當前的狀態 $ git diff readme.txt 查看區別
$ git log 顯示從近到遠的提交日誌 $ git log --pretty=oneline 每一個日誌顯示爲一行
# 用HEAD表示當前版本,上一個版本就是HEAD^
# 上上一個版本就是HEAD^^
# 往上100個版本,HEAD~100
$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed
# 回退後最新的版本在 git log中不能在看見
# 能夠在原命令行窗口下找到須要的版本號,複製前面幾位
$ git reset --hard 664d1c0
HEAD 如今位於 664d1c0 append GPL
$ git reflog 記錄每一次命令
25300b3 HEAD@{0}: reset: moving to HEAD^
664d1c0 HEAD@{1}: reset: moving to 664d1c040bc
25300b3 HEAD@{2}: reset: moving to HEAD^
664d1c0 HEAD@{3}: commit: append GPL
25300b3 HEAD@{4}: commit: add distributed
5eaef37 HEAD@{5}: commit: This is demo
0412150 HEAD@{6}: commit (initial): wrote a readme file
add 前
$ git checkout -- readme.txt
add 後
$ git reset HEAD readme.txt 將暫存區的內容回退到工做區
commit 後 推送遠程庫前 回退
$ git reset --hard HEAD^
工做區刪除->暫存區刪除->版本庫刪除
$ rm test.txt $ git rm test.txt $ git commit -m "remove test.txt"
建立SSH Key
$ ssh-keygen -t rsa -C "youremail@example.com"
在用戶主目錄裏找到.ssh目錄 隱藏着的,經過
$ ls --all
查看所有文件能夠看到
id_rsa是私鑰,不能泄露出去,
id_rsa.pub是公鑰,能夠放心地告訴任何人。
登錄GitHub,打開「Account settings」,「SSH Keys」頁面:
點「Add SSH Key」,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容:
登錄GitHub,而後,在右上角找到「Create a new repo」按鈕,建立一個新的倉庫:
在Repository name填入 learngit,其餘保持默認設置,點擊「Create repository」按鈕,就成功地建立了一個新的Git倉庫:
把本地倉庫的內容推送到GitHub倉庫。
git remote add origin git@github.com:sidianshui/learngit.git
添加後,遠程庫的名字就是origin,這是Git默認的叫法,也能夠改爲別的,可是origin這個名字一看就知道是遠程庫。
把本地庫的全部內容推送到遠程庫上:
$ git push -u origin master
關聯後,第一次推送master分支的全部內容;
只要本地做了提交,就能夠經過命令:
$ git push origin master
先建立遠程庫,而後,從遠程庫克隆
右上角「Create a new repo」按鈕,
名字叫gitskills
勾選 Initialize this repository with a README
自動爲咱們建立一個README.md文件
$ git clone git@github.com:sidiansh/gitskills.git
進入gitskills目錄看看,已經有README.md文件
查看分支:git branch
建立分支:git branch <name>
切換分支:git checkout <name>
建立+切換分支:git checkout -b <name>
合併某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>
當Git沒法自動合併分支時,就必須首先解決衝突。解決衝突後,再提交,合併完成。
用git log --graph命令能夠看到分支合併圖。
fast forward合併就看不出來曾經作過合併。
禁用Fast forward模式
準備合併dev分支,請注意--no-ff參數,表示禁用Fast forward:
$ git merge --no-ff -m "merge with no-ff" dev
本次合併要建立一個新的commit,因此加上-m參數,把commit描述寫進去。
保存現場
$ git stash
修復 BUG合併後
查看已有現場
$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
恢復現場
$ git stash apply 恢復,可是恢復後,stash內容並不刪除, $ git stash pop,恢復的同時把stash內容也刪了:
刪除現場
$ git stash drop
屢次stash
先用git stash list查看
$ git stash apply stash@{0}
每添加一個新功能,最好新建一個feature分支
未合併,強行刪除:
$ git branch -D feature-vulcan
查看遠程庫的信息
$ git remote
origin
$ git remote -v
origin git@github.com:michaelliao/learngit.git (fetch)
origin git@github.com:michaelliao/learngit.git (push)
本地推送分支,使用
git push origin branch-name
推送失敗
先用git pull抓取遠程的新提交
若是git pull提示「no tracking information」,則說明本地分支和遠程分支的連接關係沒有建立,
創建本地分支和遠程分支的關聯
git branch --set-upstream branch-name origin/branch-name
在本地建立和遠程分支對應的分支
git checkout -b branch-name origin/branch-name
$ git tag <name>
查看全部標籤: 標籤按字母排序
$ git tag
對歷史提交建立標籤
查找須要的 commit id
$ git log --pretty=oneline --abbrev-commit
建立標籤
$ git tag v0.9 6224937
查看標籤信息
$ git show <tagname>
建立帶有說明的標籤
: 用-a指定標籤名,-m指定說明文字:
$ git tag -a v0.1 -m "version 0.1 released" 3628164
能夠用PGP簽名標籤;
git tag -s <tagname> -m "blablabla..."
刪除
$ git tag -d v0.1
推送標籤到遠程
$ git push origin <tagname>
一次性推送所有還沒有推送到遠程的本地標籤:
$ git push origin --tags
刪除遠程標籤
先本地刪除
在遠程刪除
$ git push origin :refs/tags/<tagname>
Git工做區的根目錄下建立一個特殊的.gitignore文件
把要忽略的文件名填進去,Git就會自動忽略這些文件。
全部配置文件能夠直接在線瀏覽:
https://github.com/github/gitignore
ex:
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
st就表示status:
$ git config --global alias.st status
--global參數是全局參數,也就是這些命令在這臺電腦的全部Git倉庫下都有用。
$ 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是針對當前用戶起做用的,若是不加,那隻針對當前的倉庫起做用。
每一個倉庫的Git配置文件都放在.git/config文件中:
$ cat .git/config
別名就在[alias]後面,要刪除別名,直接把對應的行刪掉便可。
而當前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中:
$ cat .gitconfig