git的使用筆記-轉自廖前輩的網站

------- GIT安裝 ------- 1.linux安裝git sudo apt-get install git   老一點: sudo apt-get install git-core 2.maxOS安裝git brew install git 3.windows安裝git msysgit是Windows版的Git,從http://msysgit.github.io/下載,而後按默認選項安裝便可。安裝完成後,在開始 菜單裏找到「Git」->「Git Bash」,蹦出一個相似命令行窗口的東西,就說明Git安裝成功! 安裝完成後,還須要最後一步設置,在命令行輸入: $ git config --global user.name "Your Name" $ git config --global user.email "email@example.com" --------- 建立版本庫 --------- 1.建立版本庫--版本庫增長文件 ".git" 文件   $ mkdir learngit   $ cd learngit   $ pwd   /Users/michael/learngit   把上面目錄變成版本庫   $ git init   Initialized empty Git repository in /Users/michael/learngit/.git/ 2.   初始化一個Git倉庫,使用git init命令。     添加文件到Git倉庫,分兩步:   第一步,使用命令git add <file>,注意,可反覆屢次使用,添加多個文件;   第二步,使用命令git commit,完成。 ------------------ 3.查看當前版本庫狀態--git status   若是隻修改了沒有git add   git status尾行顯示--no changes added to commit (use "git add" and/or "git commit -a")   若是隻git add了 沒有git commit   git status第二行顯示--Changes to be committed   若是第一次提交的文件沒有被git add會顯示   Changes not staged for commit:       (use "git add <file>..." to update what will be committed)        (use "git checkout -- <file>..." to discard changes in working directory)        modified:   readme.txt   Untracked files:           (use "git add <file>..." to include in what will be committed)           LICENSE   **************上面代碼表示readme.txt文件被修改了,LICENSE歷來沒被添加過******************   ------- 版本回退 ------- 1.git log命令顯示從最近到最遠的提交日誌,重要參數 --pretty=oneline 2.git回退版本(回到過去)       在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,固然往上100個版本寫100個^       比較容易數不過來,因此寫成HEAD~100              $ git reset --hard HEAD^       $ git reset --hard 3628164       回到過去的版本 3.git回到將來版本(回到將來)     git reflog 記錄了你每一次git命令       能夠用這個回到將來的版本 4.如今總結一下:       HEAD指向的版本就是當前版本,所以,Git容許咱們在版本的歷史之間穿梭,git reset --hard commit_id。     穿梭前,用git log能夠查看提交歷史,以便肯定要回退到哪一個版本。     要重返將來,用git reflog查看命令歷史,以便肯定要回到將來的哪一個版本。 ------------ 工做區和暫存區 ------------ 1.工做區--本身本地分支的東西 2.暫存區--git add以後咱們認爲把代碼提交到了暫存區 ---------- git管理修改 ---------- 1.放棄工做區的修改   git checkout -- readme.txt   一種是readme.txt自修改後尚未被放到暫存區,如今,撤銷修改就回到和版本庫如出一轍的狀態;   一種是readme.txt已經添加到暫存區後,又做了修改,如今,撤銷修改就回到添加到暫存區後的狀態。   總之,就是讓這個文件回到最近一次git commit或git add時的狀態。     $ git status   # On branch master   # Changes to be committed:   #   (use "git reset HEAD <file>..." to unstage)   #   #       modified:   readme.txt   git reset HEAD readme.txt 能夠把暫存區的修改撤銷掉(unstage),工做區從新變成git add以前的狀態 2.git管理小結   git checkout -- readme.txt     放棄工做區的修改   git reset HEAD readme.txt      放棄緩存區的修改回到git add以前的狀態   ------- 刪除文件 ------- 1.$ rm test.txt   # Changes not staged for commit:   #   (use "git add/rm <file>..." to update what will be committed)   #   (use "git checkout -- <file>..." to discard changes in working directory)               deleted:    test.txt   rm 直接刪除是刪除工做區中的文件   a.若是你的目的是把版本庫中的也刪除,須要git add 而後git commit操做   b.若是你以爲刪錯了還能夠用 git checkout -- test.txt,把該文件從版本庫中找回來 2.小結   命令git rm用於刪除一個文件。若是一個文件已經被提交到版本庫,那麼你永遠不用擔憂誤刪,可是要當心,你只能恢   覆文件到最新版本,你會丟失最近一次提交後你修改的內容。 ---------- 創建遠程倉庫 ---------- 1.創建遠程倉庫   a.建立SSH Key。       在用戶主目錄下,看看有沒有.ssh目錄,若是有,再看這個目錄下有沒有id_rsa和id_rsa.pub     這兩個文件,若是已經有了,可直接跳到下一步。若是沒有,打開Shell(Windows下打開Git Bash).     建立SSH Key:ssh-keygen -t rsa -C "youremail@example.com"   b.登錄GitHub,打開「Account settings」,「SSH Keys」頁面:     而後,點「Add SSH Key」,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容:     另外一個辦法是本身動手,搭一個Git服務器,由於是你本身的Git服務器,因此別人也是看不見的。   c.從github創建遠程分支 把git地址記住     touch README.md //新建一個記錄提交操做的文檔     git init //初始化本地倉庫     git add README.md //添加     git commit -m "first commit"//提交到要地倉庫,並寫一些註釋     git remote add origin git@github.com:youname/Test.git //鏈接遠程倉庫並建了一個名叫:origin     git push -u origin master //將本地倉庫的東西提交到地址是origin的地址,master分支下 2.github問題   /**LINUX命令複習**/   //刪除當前文件夾下的全部 name含有.svn 文件   find . -name ".svn" | xargs rm -Rf   //刪除當前文件夾下的全部 name含有.git 文件   find . -name ".git" | xargs rm -Rf   /**LINUX命令複習**/     若是輸入$ git remote add origin git@github.com:djqiang(github賬號名)/gitdemo(項目名).git   提示出錯信息:fatal: remote origin already exists.   解決辦法以下:     a、先輸入$ git remote rm origin     b、再輸入$ git remote add origin git@github.com:djqiang/gitdemo.git 就不會報錯了!     c、若是輸入$ git remote rm origin 仍是報錯的話,        error: Could not remove config section 'remote.origin'. 咱們須要修改gitconfig文件的內容     d、找到你的github的安裝路徑,        個人是C:\Users\ASUS\AppData\Local\GitHub\PortableGit_ca477551eeb4a6720bb5c8\etc     e、找到一個名爲gitconfig的文件,打開它把裏面的[remote "origin"]那一行刪掉就行了!   若是輸入$ ssh -T git@github.com     出現錯誤提示:Permission denied (publickey).由於新生成的key不能加入ssh就會致使鏈接不上github。     解決辦法以下:          a、先輸入$ ssh-agent,再輸入$ ssh-add ~/.ssh/id_key,這樣就能夠了。     b、若是仍是不行的話,輸入ssh-add ~/.ssh/id_key 命令後       出現報錯Could not open a connection to your authentication agent.解決方法是key用Git Gui       的ssh工具生成,這樣生成的時候key就直接保存在ssh中了,不須要再ssh-add命令加入了,其它的user,token       等配置都用命令行來作。     c、最好檢查一下在你複製id_rsa.pub文件的內容時有沒有產生多餘的空格或空行,有些編輯器會幫你添加這些的。   若是輸入$ git push origin master     提示出錯信息:error:failed to push som refs to .......     解決辦法以下:     a、先輸入$ git pull origin master //先把遠程服務器github上面的文件拉下來     b、再輸入$ git push origin master     c、若是出現報錯 fatal: Couldn't find remote ref master 或者       fatal: 'origin' does not appear to be a git repository 以及       fatal: Could not read from remote repository.     d、則須要從新輸入$ git remote add origingit@github.com:djqiang/gitdemo.git      ----------- 添加遠程倉庫 -----------     要關聯一個遠程庫,使用命令git remote add origin git@server-name:path/repo-name.git;     關聯後,使用命令git push -u origin master第一次推送master分支的全部內容;     此後,每次本地提交後,只要有必要,就可使用命令git push origin master推送最新修改; ------------ 從遠程倉庫克隆 ------------     $ git clone git@github.com:michaelliao/gitskills.git     Git支持多種協議,默認的git://使用ssh,但也可使用https等其餘協議。     使用https除了速度慢之外,每次推送都必須輸入口令,可是在某些只開放http端口的公司內部就沒法使用ssh協議     而只能用https。      ------------ 建立與合併分支 ------------   Git鼓勵大量使用分支:     查看分支:git branch     建立分支:git branch <name>     切換分支:git checkout <name>     建立+切換分支:git checkout -b <name>     合併某分支到當前分支:git merge <name>     刪除分支:git branch -d <name> ------- 解決衝突 -------   $ git log --graph --pretty=oneline --abbrev-commit  分支合併圖   ---------- 分支管理策略️ ----------     主分支     master 最乾淨的一個分支不在此分支上作任何操做     開發分支   dev    開發人員主要工做的分支,用來作週期開發,快速迭代開發     修改bug   fixbug  修改bug的一個分支      ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐很是重要的一章--開始⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐ --------- fixbug分支 ---------   應用場景   你須要修改一個master(線上)分支的一個很緊急的bug,這個bug須要在1小時內解決,dev分支的功能開發到一半還   須要很長時間(遠遠大於1小時),這個時候你須要怎麼作呢?   你能夠這樣來作:          git checkout -b fixbug     而後修改bug(如今是在最新從master檢出的fixbug分支上修改bug)---修改完成     git add ./     git commit -m '修改***的bug'          git checkout dev       $ git stash     # Saved working directory and index state WIP on dev: 6224937 add merge     # HEAD is now at 6224937 add merge          git status     # From developer.playcrab.com:zhaoqiang/luck_draw     # * branch            dev        -> FETCH_HEAD     # Already up-to-date.          git merge fixbug --no-ff -m '修改***的bug後,合併fixbug分支的內容到dev'     工做現場還在,Git把stash內容存在某個地方了,可是須要恢復一下,有兩個辦法:     一是用git stash apply恢復,可是恢復後,stash內容並不刪除,你須要用git stash drop來刪除;     另外一種方式是用git stash pop,恢復的同時把stash內容也刪了     你能夠屢次stash,恢復的時候,先用git stash list查看,而後恢復指定的stash,用命令:     $ git stash apply stash@{0}          git stash pop  (這時候你再用git stash list來查看暫存的東西)          git checkout master     git merge fixbug --no-ff -m '修改***的bug後,合併fixbug分支的內容到dev'          而後刪除fixbug分支  git branch -d fixbug  (-d銷燬fixbug分支  -D強制銷燬)          這樣作是爲了之後dev分支開發完以後和master分支合併的時候不衝突           ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐很是重要的一章--結束⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐ ------- 多人協做 ------- 1.當你使用git clone 從遠程分支克隆的時候,本地master分支和遠程的master分支會自動對應起來,且遠程倉庫的默認   名稱默認爲origin   查看遠程庫的分支git remote  或者詳細信息  git remote -v   origin  git@github.com:michaelliao/learngit.git (fetch)   origin  git@github.com:michaelliao/learngit.git (push)   把本地分支推送到遠程分支   git push origin 分支名稱(本地分支名稱通常和遠程分支名稱是一致的)   # 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 dev origin/<branch>   上面是git pull 失敗 須要的步驟   設置dev和origin/dev的連接:   $ git branch --set-upstream dev origin/dev 2.多人協做步驟   所以,多人協做的工做模式一般是這樣:     q.首先,能夠試圖用git push origin branch-name推送本身的修改;     b.若是推送失敗,則由於遠程分支比你的本地更新,須要先用git pull試圖合併;     c.若是合併有衝突,則解決衝突,並在本地提交;     d.沒有衝突或者解決掉衝突後,再用git push origin branch-name推送就能成功!     e.若是git pull提示「no tracking information」,則說明本地分支和遠程分支的連接關係沒有建立,       用命令git branch --set-upstream branch-name origin/branch-name。     這就是多人協做的工做模式,一旦熟悉了,就很是簡單。      ------- 標籤管理 ------- 1.git打標籤     切換到須要打標籤的分支     git tag v1.0   或者     git tag -a <tagname> -m "blablabla..."  指定標籤備註的標籤     查看全部標籤     git tag     查看標籤信息     git show v1.0 2.git標籤操做     刪除標籤     $ git tag -d v1.0     推送本地標籤到遠程     git push origin <tagname>     例如 git push origin v1.0     一次推送本地全部未能推送到遠程的標籤     $ git push origin --tags     若是標籤已經推送到遠程,要刪除遠程標籤就麻煩一點,先從本地刪除:     $ git tag -d v0.9     # Deleted tag 'v0.9' (was 6224937)          $ git push origin :refs/tags/v0.9     # To git@github.com:michaelliao/learngit.git     # - [deleted]         v0.9 -------- 自定義git -------- 1.讓Git顯示顏色,會讓命令輸出看起來更醒目:     $ git config --global color.ui true 2.配置快捷鍵     $ git config --global alias.st status  (git status = git st)     $ git config --global alias.co checkout(git checkout = git co)     $ git config --global alias.ci commit  (git commit   = git ci)     $ git config --global alias.br branch  (git branch   = git br)   怎麼刪除git配置文件的快捷鍵   只須要到用戶主目錄找到.gitconfig 文件 把對應的行刪除就好了 cd  ~/     或者   git config --global --unset alias.st     查看配置別名   git config --list | grep alias   git config --get-regexp alias   ------------ 搭建git服務器 ------------ 前提     搭建Git服務器須要準備一臺運行Linux的機器,強烈推薦用Ubuntu或Debian,這樣,經過幾條簡單的apt命令就可     以完成安裝。      第一步 安裝git服務     $ sudo apt-get install git 第二步,建立一個git用戶,用來運行git服務:     $ sudo adduser git 第三步,建立證書登陸:     收集全部須要登陸的用戶的公鑰,就是他們本身的id_rsa.pub文件,把全部公鑰導入到:     /home/git/.ssh/authorized_keys文件裏,一行一個。 第四步,初始化Git倉庫:     先選定一個目錄做爲Git倉庫,假定是/srv/sample.git,在/srv目錄下輸入命令:     $ sudo git init --bare sample.git     Git就會建立一個裸倉庫,裸倉庫沒有工做區,由於服務器上的Git倉庫純粹是爲了共享,因此不讓用戶直接登陸到服     務器上去改工做區,而且服務器上的Git倉庫一般都以.git結尾。而後,把owner改成git:     $ sudo chown -R git:git sample.git 第五步,禁用shell登陸:     出於安全考慮,第二步建立的git用戶不容許登陸shell,這能夠經過編輯/etc/passwd文件完成。找到相似下面的一行:     git:x:1001:1001:,,,:/home/git:/bin/bash  改成     git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell     這樣,git用戶能夠正常經過ssh使用git,但沒法登陸shell,由於咱們爲git用戶指定的git-shell每次一登陸就     自動退出。 第六步,如今,能夠經過git clone命令克隆遠程倉庫了,在各自的電腦上運行:     $ git clone git@server:/srv/sample.git      這裏咱們不介紹怎麼玩Gitosis了,幾百號人的團隊基本都在500強了,相信找個高水平的Linux管理員問題不大。       
相關文章
相關標籤/搜索