Git Ubuntu 命令行下使用

Gitgit

demo

環境: Ubuntu github


1.安裝

    sudo apt-get install git

2.建立版本庫

    建立一個空目錄

$ 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後面輸入的是本次提交的說明

3.時光機穿梭

$ 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"

4.遠程倉庫

        建立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文件

5.分支管理

    建立與合併分支

        查看分支: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描述寫進去。

    Bug分支

        保存現場

$ 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分支

        每添加一個新功能,最好新建一個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

6.標籤管理:

    建立標籤

$ 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>


7.自定義Git

    忽略特殊文件

        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
相關文章
相關標籤/搜索