--------------------git--------------------
一、簡介
一、Git是一款免費、開源的分佈式版本控制系統,用於敏捷高效地處理任何或小或大的項目。[1] Git的讀音爲/gɪt/。
二、Git是一個開源的分佈式版本控制系統,能夠有效、高速的處理從很小到很是大的項目版本管理。[2] Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。
二、特色
一、從服務器上克隆完整的Git倉庫(包括代碼和版本信息)到單機上。
二、在本身的機器上根據不一樣的開發目的,建立分支,修改代碼。
三、在單機上本身建立的分支上提交代碼。
四、在單機上合併分支。
五、把服務器上最新版的代碼fetch下來,而後跟本身的主分支合併。
六、生成補丁(patch),把補丁發送給主開發者。
七、看主開發者的反饋,若是主開發者發現兩個通常開發者之間有衝突(他們之間能夠合做解決的衝突),就會要求他們先解決衝突,而後再由其中一我的提交。若是主開發者能夠本身解決,或者沒有衝突,就經過。
八、通常開發者之間解決衝突的方法,開發者之間可使用pull 命令解決衝突,解決完衝突以後再向主開發者提交補丁。
--------------------git與SVN的對比--------------------
一、git是分佈式的,SVN不是。
二、git把內容按元數據方式存儲,而SVN是按文件。
三、git分支和SVN的分支不一樣。
四、git的內容完整性要優於SVN。
--------------------git原理分析--------------------
一、git主要分爲
一、工做區:Workspace
二、暫存區:Index
三、本地倉庫:Repository
四、遠程倉庫:Remote
二、部分操做
一、git add:工做區提交到暫存區。
二、git commit:暫存區提交到本地倉庫。
三、git push:本地倉庫提交到遠程倉庫。
四、git fetch:遠程倉庫提取到本地倉庫。
五、git checkout:本地倉庫提取到工做區。
六、git pull:遠程倉庫提取到工做區。
--------------------git經常使用命令--------------------
一、新建代碼倉庫
一、git init:在當前目錄新建一個Git代碼庫。
二、git init [project-name]:新建一個目錄,將其初始化爲Git代碼庫。
三、git clone [url]:下載一個項目和它的整個代碼歷史。
二、配置
一、Git的設置文件爲.gitconfig,它能夠在用戶主目錄下(全局配置),也能夠在項目目錄下(項目配置)。
二、git config --list:顯示當前的Git配置。
三、git config -e [--global]:編輯Git配置文件。
四、設置提交代碼時的用戶信息:
一、git config [--global] user.name "[name]"
二、git config [--global] user.email "[email address]"
三、增長/刪除文件
一、git add [file1] [file2] ---:添加指定文件到緩存區。
二、git add [dir]:添加指定目錄到暫存區,包括子目錄。
三、git add:添加當前目錄的全部文件到暫存區。
四、git rm [file1] [file2] ---:刪除工做區文件,而且將此次刪除放入暫存區。
五、git mv [file-original] [file-renamed]:更名文件,而且將這個更名放入暫存區。
四、代碼提交
一、git commit -m [message]:提交暫存區到倉庫區。
二、git commit [file1] [file2] --- -m [message]:提交暫存區的指定文件到倉庫區。
三、git commit -a:提交工做區自上次commit,替代上一次提交。
四、git commit --amend -m [message]:使用一次新的commit,替代上一次提交。
注:若是代碼沒有任何新變化,則用來改寫上一次commit的提交信息。
五、git commit -amend [file1] [file2] ---:重作上一次commit,幷包括指定文件的新變化。
五、分支
一、git branch:列出全部本地分支
二、git branch -r:列出全部遠程分支
三、git branch -a:列出全部本地分支和遠程分支
四、git branch [branch-name]:新建一個分支,但依然停留在當前分支
五、git checkout -b [branch]:新建一個分支,並切換到該分支
六、git branch [branch] [commit]:新建一個分支,指向指定commit
七、git push origin [branch]:新建一個遠程分支,本地新建而後推送
八、git branch --track [branck] [remote-branch]:新建一個分支,與指定的遠程分支創建追蹤關係
九、git checkout [branch-name]:切換到指定分支,並更新工做區
十、git checkout -:切換到上一個分支
十一、git branch --set-upstream-to [remote-branch]:創建追蹤關係,設置當前分支與指定的遠程分支之間關聯
十二、git merge [branch]:合併指定分支到當前分支
1三、git cherry-pick [commit]:選擇一個commit,合併進當前分支
1四、git branch -d [branch-name]:
刪除分支
1五、刪除遠程分支
一、git push origin --detele [branch-name]
二、git branch -dr [remote/branch]
六、標籤
一、git tag:列出全部tag。
二、git tag [tag]:新建一個tag在當前commit。
三、git tag [tag] [commit]:新建一個tag在指定commit。
四、git tag -d [tag]:刪除本地tag。
五、git push origin :refs/tags/[tagName]:刪除遠程tag。
六、git show [tag]:查看tag信息。
七、git push [remote] [tag]:提交指定tag。
八、git push [remote] --tags:提交全部tag。
九、git checkout -b [branch] [tag]新建一個分支,指向某個tag。
七、查看信息
一、git status:顯示有變動的文件。
二、git log:顯示當前分支的版本歷史。
三、git log --stat:顯示commit歷史,以及每次commit發送變動的文件。
四、git log -S [keyword]:搜索提交歷史,根據關鍵詞。
五、git log [tag] HEAD --pretty=format:%s:顯示某個commit以後的全部變更,每一個commit佔據一行。
六、git log [tag] HEAD --grep feature:顯示某個commit以後的全部變更,其「提交說明」必須符合搜索條件。
七、顯示某個文件的版本歷史,包括文件夾名
一、git log --follow [file]
二、git whatchanged [file]
八、git log -p [file]:顯示指定文件相關的每一次diff。
九、git log -5 --pretty --oneline:顯示過去5次提交。
十、git shortlog -sn:顯示全部提交過的用戶,按提交次數排序。
十一、git blame [file]:顯示指定文件是什麼人在什麼時間修改過
十二、git diff:顯示暫存區和工做區的差別。
1三、git diff --cached [file]:顯示暫存區和上一個commit的差別。
1四、git diff HEAD:顯示工做區與當前分支最新commit之間的差別。
1五、git diff [first-branch] ...[second-branch]:顯示兩次提交之間的差別。
1六、git show [commit]:顯示某次提交的元數據和內容變化。
1七、git show --name-only [commit]:顯示某次提交發生變化的文件。
1八、git show [commit]:[filename]:顯示某次提交時,某個文件的內容。
1九、git reflog:顯示當前分支的最近幾回提交
八、遠程同步
一、git fetch [remote]:下載遠程倉庫的全部變更。
二、git remote -v:顯示全部遠程倉庫。
三、git remote show [remote]:顯示某個遠程倉庫的信息。
四、git remote add [shortname] [url]:增長一個新的遠程倉庫,並命名。
五、git push [remote] [branch]:上傳本地指定分支到遠程倉庫。
六、git push [remote] --force:強行推送當前分支到遠程倉庫,即便有衝突。
七、git push [remote] --all:推送全部分支到遠程倉庫。
九、撤銷
一、git checkout [file]:回覆暫存區的指定文件到工做區。
二、git checkout [commit] [file]:恢復某個commit的指定文件到暫存區和工做區。
三、git checkout:恢復暫存區的全部文件到工做區。
四、git reset [file]:重置暫存區的指定文件,與上一次commit保持一致,但工做區不變。
五、git reset --hard:重置暫存區與工做區,與上一次commit保持一致。
六、重置當前分支的指針爲指定commit,同時重置暫存區,但工做區不變。
七、git reset --keep [commit]:重置當前HEAD爲指定commit,但保持暫存區和工做區不變。
八、git revert [commit]:新建一個commit,用來撤銷指定commit;後者的全部變化都將被前者抵消,而且應用到當前分支。
九、暫時將未提交的變化移除,稍後再移入:
一、git stash
二、git stash pop
十、其餘
一、git archive:生成一個可供發佈的壓縮包
二、rm .git:刪除項目的git管理
--------------------github操做說明--------------------
一、登陸github註冊對應的帳號
https://github.com
二、建立一個項目:
New repository
三、clone項目:
$ git clone https://(url)
四、第一次使用需配置用戶名和郵箱:
$ git config --global user.name ""
$ git config --global user.email ""
五、測試操做
$ git add test.py
$ git commit -m "init test.py"
$ git push origin master
注:最後須要輸入對應的帳號和密碼
六、ssh配置:
一、Settings --> SSH and GPG keys:能夠爲項目配置身份密鑰,這樣沒必要每次推送都輸入帳號和密碼
二、ubuntu下生成當前電腦ssh祕鑰
三、ssh -keygen
一、id_rsa是私鑰,本身保管好
二、id_rsa.pub是公鑰,上傳至github
四、將公鑰上傳至github做爲ssh keys
五、修改項目的配置文件ssh方式,編輯項目裏的.git/config文件
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
#url = https://github.com/(url)
url = git@github.com:(url)
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge =refs/heads/master
--------------------GitHub簡介--------------------
一、GitHub 是一個面向開源及私有軟件項目的託管平臺,由於只支持 Git 做爲惟一的版本庫格式進行託管,故名 GitHub。
二、GitHub 於 2008 年 4 月 10 日正式上線,除了 Git 代碼倉庫託管及基本的 Web 管理界面之外,還提供了訂閱、討論組、文本渲染、在線文件編輯器、協做圖譜(報表)、代碼片斷分享(Gist)等功能。目前,其註冊用戶已經超過350萬,託管版本數量也是很是之多,其中不乏知名開源項目 Ruby on Rails、jQuery 等