在Linux系統上,使用git提交代碼~~

$ mkdir learngit
$ cd learngit
$ pwd
初始化一個Git倉庫
git init ,把這個目錄變成Git能夠管理的倉庫(目錄下多了一個.git的目錄 ls -a)

添加文件到Git倉庫:
git add 把文件添加到倉庫
git commit -m " xxx" 文件提交到倉庫
git status 工做區的狀態,讓咱們時刻掌握倉庫當前的狀態
git diff  查看修改內容

版本回退
git log (--pretty=online)查看提交歷史,顯示從最近到最遠的提交日誌,以便肯定要回退到哪一個版本。

用HEAD表示當前版本,也就是最新的提交3628164...882e1e0,上一個版本就是HEAD^,上上一個版本就是HEAD^^,固然

往上100個版本寫100個^比較容易數不過來,因此寫成HEAD~100
git reset --hard HEAD^   回退到上一個版本

git reset --hard  (3628164)   指定回到某個版本(版本號不必寫全,前幾位就能夠了,Git會自動去找。

固然也不能只寫前一兩位)
git reflog   查看命令歷史,以便肯定要回到將來的哪一個版本。

工做區和暫存區
工做區(Working Directory)
暫存區(stage或index)
版本庫(Repository)工做區有一個隱藏目錄.git,這個不算工做區,而是Git的版本庫
前面講了咱們把文件往Git版本庫裏添加的時候,是分兩步執行的:
 第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;
 第二步是用git commit提交更改,實際上就是把暫存區的全部內容提交到當前分支。
git



git diff HEAD -- readme.txt   查看工做區和版本庫裏面最新版本的區別

撤銷修改
git checkout -- readme.txt    當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時

當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改
第一步:git reset HEAD readme.txt   把暫存區的修改回退到工做區
第二部:git checkout -- readme.txt  


提交分支錯誤,複製分支:github



刪除文件
1、rm只刪除工做區信息; 使用 git checkout -- file便可恢復;
2、git rm 刪除工做區和stage信息;
一、使用git reset HEAD -- file便可恢復;app

二、恢復步驟:ssh

     1)先使用git reset HeAD -- file從master中把已刪除信息copy到到stage區;ide

     2)再使用git checkout -- file從stage區把已刪除信息copy到工做區。over!!!fetch

     3)這時你就看到刪除的文件又回來啦。啦啦加密

3、git commit -m 「file」刪除工做區,stage和master信息;url

     一、使用git reset --hard HEAD^便可恢復。spa

     二、恢復步驟: 1)先使用git reset --hard HEAD^從master回收處恢復到master中; 2)再使用git reset HeAD -- file從
         master中把已刪除信息copy到到stage區;日誌

     3)最後,使用git checkout -- file從stage區把已刪除信息copy到工做區
     4)這時你就看到刪除的文件又回來啦。啦啦啦!

遠程倉庫

1.註冊一個GitHub帳號,就能夠免費得到Git遠程倉庫。

2.本地Git倉庫和GitHub倉庫之間的傳輸是經過SSH加密的

     1)建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,若是有,再看看這個目錄下有沒有id_rsa和          id_rsa.pub這兩個文件,若是沒有,建立ssh key:

        $ ssh-keygen -t rsa -C "youremail@example.com"

     2)登錄GitHub,打開「Account settings」,「SSH Keys」頁面:點「Add SSH Key」,填上任意             Title,在Key文本框裏粘貼id_rsa.pub文件的內容:

添加遠程庫:

    點擊按鈕create a new repository 建立一個新的倉庫

     關聯一個遠程庫,把本地倉庫的內容推送到GitHub倉庫

     $ git remote add origin git@github.com:michaelliao/learngit.git

   把本地庫的全部內容推送到遠程庫上

     $ git push -u origin master

     因爲遠程庫是空的,咱們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支      內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在之後的      推送或者拉取時就能夠簡化命令。

從遠程庫克隆

     git clone git@github.com:jialechun/learngit1.git


分支管理

查看分支:git branch

建立分支:git branch <name>

切換分支:git checkout <name>

建立+切換分支:git checkout -b <name>

合併某分支到當前分支:git merge <name>


                                     git merge --no-ff -m "merged bug fix 101" issue-101


刪除分支:git branch -d <name>

看到分支合併圖: git log --graph

git stash   切換分支前把修改的內容存在某個地方

git stash list   查看存儲的內容

git stash apply   切回分支恢復修改的內容,stash內容不刪

git stash apply stash@{0} 屢次stash,切回分支指定恢復修改的內容,stash內容不刪除

git stash pop  恢復同時stash的內容也刪除

git branch -D <name> 強行刪除。要丟棄一個沒有被合併過的分支


  • 查看遠程庫信息,使用git remote -v

  • 本地新建的分支若是不推送到遠程,對其餘人就是不可見的;

  • 從本地推送分支,使用git push origin branch-name,若是推送失敗,先用git pull抓取遠程的新提交;

  • 在本地建立和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致;

  • 創建本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name

  • 從遠程抓取分支,使用git pull,若是有衝突,要先處理衝突。

建立標籤


  • 命令git tag v1.0  用於新建一個標籤,默認爲HEAD,也能夠指定一個commit id;

  • git tag v0.9 6224937   找到歷史提交的commit id新建一個標籤

  • git tag -a v0.1 -m "說明文字"   能夠指定標籤信息;

  • git tag -s <tagname> -m "blablabla..."能夠用PGP簽名標籤;

  • 命令git tag能夠查看全部標籤。

  • git tag -r 查看遠程標籤

  • 命令git show v0.9    能夠看到說明文字

     $ git pull origin --tags      合併遠程倉庫的tag到本地:

  • 命令git push origin <tagname>能夠推送一個本地標籤;

  • 命令git push origin --tags能夠推送所有未推送過的本地標籤;

    標籤已經推送到遠程,先從本地刪除,從遠程刪除:

  • 命令git tag -d <tagname>能夠刪除一個本地標籤;

  • 命令git push origin :refs/tags/<tagname>能夠刪除一個遠程標籤。

配置別名

     git config --global alias.st status

     git config --global alias.co checkout

      git config --global alias.ci commit

      git config --global alias.br branch

每一個倉庫的Git配置文件都放在.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

              co = checkout

             ci = commit br = branch

             st = status

         [user]

             name = Your Name

             email = your@email.com


git rebase hea~1

git fetch:至關因而從遠程獲取最新版本到本地,不會自動merge
git pull:至關因而從遠程獲取最新版本並merge到本地,至關於git fetch 和 git merge

相關文章
相關標籤/搜索