工做區(Working Directory)
暫存區(stage)
版本庫(Repository)
中央服務器
git add(stage) -> 暫存區 -> git commit -> 本地版本庫 -> git push 服務器
Git的版本庫裏存了不少東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲咱們自動建立的第一個分支master,
以及指向master的一個指針叫HEADjava
清除緩存,使.gitignore生效git rm -r --cached .
linux
git init git add . 或者 git add name.file git commit -m "first commit" 或者 git commit -m "first commit" name.file git remote add origin https://gitee.com/*.git git push -u origin master 或者 git push (只會提交暫存區的文件)
添加文件的時候,咱們用git add
命令,修改代碼也是用這個命令git add
,是否是以爲很奇怪。git
windows
在windows下第一次輸入用戶名和密碼後,會自動記錄用戶名和密碼,下次提交的時候不須要重複輸入。github
linux/mac os
在用戶~目錄下shell
$ cd $ vi .git-credentials https://username:password@github.com 若是你用的是gitee的話 https://username:password@gitee.com $ git config --global credential.helper store $ cat .gitconfig [credential] helper = store
git fetch和get pull都是將服務器代碼更新到本地windows
git fetch origin master git log -p master..origin/master git merge origin/master
另一種方式緩存
git fetch origin master:tmp git diff tmp git merge tmp
git pull:從遠程獲取最新版本併合併到本地,至關於git fetch和get merge命令。服務器
git reset
git statusfetch
首先,在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,往上100個版本寫成HEAD~100
Git容許咱們在歷史版本中切換,使用命令git reset
能夠回退到任意一個歷史版本中。
git reset有三個選項,--hard、--mixed、--soft指針
//僅僅只是撤銷已提交的版本庫,不會修改暫存區和工做區
git reset --soft 版本庫ID
//僅僅只是撤銷已提交的版本庫和暫存區,不會修改工做區
git reset --mixed 版本庫ID
//完全將工做區、暫存區和版本庫記錄恢復到指定的版本庫
git reset --hard 版本庫ID
$ git log commit 611dd5e339d3748e8b54620a203988*** Author: xxx <xxx@163.com> Date: Sat Nov 11 18:08:28 2017 +0800 first commit $ git reset --hard commit_id //將全部的文件都恢復到id版本 //恢復到上一個版本 $ git reset --hard HEAD^ // 恢復到前兩個版本 $ git reset --hard HEAD~2
用git log能夠查看提交歷史,以便肯定要回退到哪一個版本。
用git reflog查看命令歷史,以便肯定要回到將來的哪一個版本.
從工做區撤銷,其實就是刪除後從新檢出
rm -f hello.c git checkout [commit_id] hello.c
從暫存區撤銷git reset HEAD 文件名
首先把文件添加到.gitignore
裏面忽略掉,而後提交使.gitignore生效。
執行命令,刪除版本庫中文件但不刪除本地文件
git rm --cached .DS_Store //--cached不刪除本地,只刪除暫存區的文件 git commit -m "remove ds_store" //提交 git push //將修改提交帶版本庫,而後查看版本庫就看到文件刪除了
git rm -r --cached xxx.iml //-r 若是存在子文件則遞歸刪除 (git add xxx.iml) //若.gitignore文件中已經忽略了xxx.iml則能夠不用執行此句 git commit -m "delete file" git push
git checkout -- test.c git checkout -- '*.c' git checkout branch-name //切換分支
git mv -f old_filename new_filename git add -u new_filename git commit -m "rename" git push
git add的幾個選項
git add -u:將文件的 修改、刪除,添加到暫存區。
git add .:將文件的 新建、修改,添加到暫存區。
git add -A:將文件的 新建、修改、刪除,添加到暫存區。
warning: LF will be replaced by CRLF in projects.iml.
The file will have its original line endings in your working directory.
在linux和mac os中換行符表示爲LF,可是在windows中衛CRLF。git config --global core.autocrlf true
git config --global core.autocrlf true
Configure Git on Windows to properly handle line endings
解釋:core.autocrlf是git中負責處理line endings的變量,能夠設置三個值--true,inout,false.
設置成三個值會有什麼效果呢?
【1】If core.autocrlf is set to true, that means that any time you add a file to the git repo that git thinks is a text file, it will turn all CRLF line endings to just LF before it stores it in the commit.。
設置爲true,添加文件到git倉庫時,git將其視爲文本文件。他將把crlf變成lf。
【2】If core.autocrlf is set to false, no line-ending conversion is ever performed, so text files are checked in as-is. This usually works ok。
設置爲false時,line-endings將不作轉換操做。文本文件保持原來的樣子
git diff是對比本地倉庫(local repository)和遠程倉庫(remote repository)之間的差別,不包括未提交的和stage內的。
//修改任意本地文件,而後執行下面命令 $ git diff master origin/master //控制檯無任何信息 $ git add . $ git diff master origin/master $ git commit -m "update" $ git diff master origin/master $ diff --git a/excel-upload/src/test/java/org/xiaog/config/UploadConfigTest.java b/excel-upload/src/test/java/org/xiaog/config/UploadConfigTest.java index a6067c5..7ba72d7 100644 --- a/excel-upload/src/test/java/org/xiaog/config/UploadConfigTest.java +++ b/excel-upload/src/test/java/org/xiaog/config/UploadConfigTest.java ....
git init --bare
建立一個裸倉庫,只管理版本信息,不會有work tree,也就是不會有代碼文件,也不會有.git文件夾,這個裸倉庫只有.git文件夾裏面的內容。
git remote -v
能夠看到origin的信息。分別是push和fetch的git地址,且指向的是同一個git服務器地址。git push
和git push origin master:master
默認狀況下,這兩個命令實際上是同樣的,都是將本地倉庫的代碼提交到遠程倉庫的master分支。第一個master是本地後面的值遠程倉庫master