13.git的簡單使用

安裝

https://git-scm.com/downloadshtml

一直點下一步就能夠,安裝完後打開方法:‘開始菜單’-->'Git'-->''Git Bashjava

安裝完成後設置名字和電子郵件python

 bash基本操做git

1)、cd : 改變目錄。
2)、cd . . 回退到上一個目錄,直接cd進入默認目錄
3)、pwd : 顯示當前所在的目錄路徑。
4)、ls(ll): 都是列出當前目錄中的全部文件,只不過ll(兩個ll)列出的內容更爲詳細。
5)、touch : 新建一個文件 如 touch index.js 就會在當前目錄下新建一個index.js文件。
6)、rm: 刪除一個文件, rm index.js 就會把index.js文件刪除。
7)、mkdir: 新建一個目錄,就是新建一個文件夾。
8)、rm -r : 刪除一個文件夾, rm -r src 刪除src目錄, 好像不能用通配符。
9)、mv 移動文件, mv index.html src index.html 是咱們要移動的文件, src 是目標文件夾,固然, 這樣寫,必須保證文件和目標文件夾在同一目錄下。
10)、reset 從新初始化終端/清屏。
11)、clear 清屏。
12)、history 查看命令歷史。
13)、help 幫助。
14)、exit 退出。
15)、#表示註釋
命令

建立倉庫

1.切換目錄github

2.經過  git init 命令把當前目錄變成git能夠管理的倉庫web

會生成一個.git目錄,若是沒有看見運行  ls -ah 就能夠查看到算法

hello.html內容「hello world」sql

把文件提交到倉庫bootstrap

-m 後面輸入的是本次提交的說明安全

查看配置

git config -l   查看git環境詳細配置

git config --global --list    查看當前用戶配置

git操做

更改hello.html內容爲 'hello git!'

運行git status  查看狀態

git diff hello.html   查看哪裏作了修改

知道哪裏修改後在提交  git add hello.html     git commit -m "add distributed"
git log 查看歷史記錄  

git log --pretty=oneline   一行顯示
 退回上次修改的某個版本
git reset --hard a8d2be07ab1a718179e08f78f430fd91cc3cad33

git reflog   記錄每一次提交的commit id,而後經過這個能夠恢復到某個版本

總結:

複製代碼
    #HEAD指向的版本就是當前版本,所以,Git容許咱們在版本的歷史之間穿梭,使用命令git reset --hard commit_id。

    #穿梭前,用git log能夠查看提交歷史,以便肯定要回退到哪一個版本。

    #要重返將來,用git reflog查看命令歷史,以便肯定要回到將來的哪一個版本。
複製代碼

工做區和暫存區

工做區:working directory  就是一個目錄   learngit文件夾就是一個工做區

版本庫:repository    工做區的隱藏目錄  .git  這個不是工做區,而是git的版本庫

Git的版本庫裏存了不少東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲咱們自動建立的第一個分支master,以及指向master的一個指針叫HEAD

複製代碼
前面講了咱們把文件往Git版本庫裏添加的時候,是分兩步執行的:

第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;

第二步是用git commit提交更改,實際上就是把暫存區的全部內容提交到當前分支
複製代碼

須要提交的文件修改統統放到暫存區,而後,一次性提交暫存區的全部修改。

 撤銷修改

場景1:當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令git checkout -- file。

場景2:當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操做

刪除

git rm filename

 GitHub使用

 生成密匙

$ ssh-keygen -t rsa -C "1184405959@qq.com"

C:\Users\Administrator\.ssh目錄下找到id_rsa.pub複製裏面全部內容

github帳號-->your profile-->edit profile-->SSH and GPG key-->New SSH key-->粘貼key

 添加遠程庫

1.GitHub 上選擇new repository 建立一個learn-git 倉庫

2.把本地倉庫文件上傳到遠程

git remote add origin https://github.com/derek-zhang123/learn-git.git
 git push -u origin master    #上傳全部  第一次要加-u 之後就直接 git push origin master

若是報錯 運行以下命令再重複上傳一次

 git remote rm origin

從遠程庫克隆

在github建立learn-git倉庫

克隆到本地

 git clone https://github.com/derek-zhang123/learn-git

而後在本地會生成一個learn-git目錄,裏面克隆了remote倉庫全部的文件

分支管理

複製代碼
git branch dev     #建立分支

git checkout dev    #切換到div分支


#能夠合併一個命令  建立並切換到dev
git checkout -b dev

#查看分支 *表明當前在哪一個分支 git branch
複製代碼

添加內容到hello.html,

而後提交

這是在分支dev上作的操做,提交完成後,切換到master分支

這個時候查看hello.html的內容時,發現剛纔添加的內容並無顯示,由於那是在dev分支上提交的,而master分支並無變

如今,把dev上的工做合併到master分支上:

git merge dev

再查看時,剛纔添加的內容能夠看到了

刪除分支dev

git branch -d dev

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

總結:

複製代碼
查看分支:git branch

建立分支:git branch <name>

切換分支:git checkout <name>

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

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

刪除分支:git branch -d <name>
複製代碼

解決分支衝突

當分支dev和master都修改了hello.html,合併會提示衝突

這個時候須要手動解決衝突(在master分支修改內容後用下面的命令提交)

分支管理策略

git merge --no-ff -m "merge with no-ff" dev

合併分支時,加上--no-ff參數就能夠用普通模式合併,合併後的歷史有分支,能看出來曾經作過合併,而fast forward合併就看不出來曾經作過合併。

 bug分支

修復bug時,咱們會經過建立新的bug分支進行修復,而後合併,最後刪除;

當手頭工做沒有完成時,先把工做現場git stash一下,而後去修復bug,修復後,再git stash pop,回到工做現場。

 多人協做

多人協做的工做模式一般是這樣:

  1. 首先,能夠試圖用git push origin branch-name推送本身的修改;

  2. 若是推送失敗,則由於遠程分支比你的本地更新,須要先用git pull試圖合併;

  3. 若是合併有衝突,則解決衝突,並在本地提交;

  4. 沒有衝突或者解決掉衝突後,再用git push origin branch-name推送就能成功!

若是git pull提示「no tracking information」,則說明本地分支和遠程分支的連接關係沒有建立,用命令git branch --set-upstream branch-name origin/branch-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
查看標籤   git tag
默認標籤打在最新的commit提交上,要想給歷史的提交打上標籤,也很簡單。先找到標籤 git log --pretty=oneline --abbrev-commit

好比要給add xxx添加上標籤,找到它對應的commit id添加  git tag v0.9 098f23b
查看標籤信息:git show v0.9
刪除標籤: git tag -d v0.9
推送標籤:git push origin v1.0
一次推送所有標籤:git push origin --tags


若是標籤已經推送到遠程,要刪除遠程標籤就麻煩一點,先從本地刪除:

git tag -d v1.0

再刪除遠程:

git push origin :refs/tags/v1.0

總結:

複製代碼
    命令git push origin <tagname>能夠推送一個本地標籤;

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

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

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

使用github

訪問主頁https://github.com/twbs/bootstrap,點「Fork」就在本身的帳號下克隆了一個bootstrap倉庫,而後,從本身的帳號下clone:

git clone https://github.com/derek-zhang123/bootstrap

 命令總結

複製代碼
#本地使用
git init
ls -ah                 #查看隱藏
git status            #查看狀態
git add -A           #添加全部
git commit -m "提交信息"   
git diff               #查看文件更改的變化
git checkout -- .       #撤銷修改
git reset --hard 55f9ddb      #回退到某個版本  後面七位數字是commit id
git reflog                
git clean -xf        #刪除當前目錄下全部沒有track過的文件
git config --global core.quotepath false #文件名字是中文時,解決亂碼顯示問題

#git與github關聯
git config --global user.name "你的用戶名"
git config --global user.email "你的郵箱"
ssh-keygen -t rsa -C "你的郵箱"     #生成ssh key
clip < ~/.ssh/id_rsa.pub              #將生成的key複製到粘貼板
git push -u origin master
git pull origin master
git remote add origin 你複製的地址
git push
git clone https://github.com/schaepher/blogsbackup.git #下載別人的代碼到本地
複製代碼

 

理論基礎

四個工做區域

  Workspace:工做區,就是你平時存放項目代碼的地方

  Index / Stage:暫存區,用於臨時存放你的改動,事實上它只是一個文件,保存即將提交到文件列表信息

  Repository:倉庫區(或本地倉庫),就是安全存放數據的位置,這裏面有你提交到全部版本的數據。其中HEAD指向最新放入倉庫的版本

  Remote:遠程倉庫,託管代碼的服務器,能夠簡單的認爲是你項目組中的一臺電腦用於遠程數據交換

其它概念

  Directory:使用Git管理的一個目錄,也就是一個倉庫,包含咱們的工做空間和Git的管理空間。

  WorkSpace:須要經過Git進行版本控制的目錄和文件,這些目錄和文件組成了工做空間。

  git:存放Git管理信息的目錄,初始化倉庫的時候自動建立。

  Index/Stage:暫存區,或者叫待提交更新區,在提交進入repo以前,咱們能夠把全部的更新放在暫存區。

  Local Repo:本地倉庫,一個存放在本地的版本庫;HEAD會只是當前的開發分支(branch)。

  Stash:隱藏,是一個工做狀態保存棧,用於保存/恢復WorkSpace中的臨時狀態

git工做流程

  在工做目錄中添加、修改文件;

  將須要進行版本管理的文件放入暫存區域;

  將暫存區域的文件提交到git倉庫。

git管理的文件有三種狀態:

  已修改(modified)

  已暫存(staged)

  已提交(committed)

git文件操做

版本控制就是對文件的版本控制,要對文件進行修改、提交等操做,首先要知道文件當前在什麼狀態,否則可能會提交了如今還不想提交的文件,或者要提交的文件沒提交上。GIT不關心文件兩個版本之間的具體差異,而是關心文件的總體是否有改變,若文件被改變,在添加提交時就生成文件新版本的快照,而判斷文件總體是否改變的方法就是用SHA-1算法計算文件的校驗和。

文件四中狀態

 

  • Untracked: 未跟蹤, 此文件在文件夾中, 但並無加入到git庫, 不參與版本控制. 經過git add 狀態變爲Staged.

  • Unmodify: 文件已經入庫, 未修改, 即版本庫中的文件快照內容與文件夾中徹底一致. 這種類型的文件有兩種去處, 若是它被修改, 而變爲Modified. 若是使用git rm移出版本庫, 則成爲Untracked文件

  • Modified: 文件已修改, 僅僅是修改, 並無進行其餘的操做. 這個文件也有兩個去處, 經過git add可進入暫存staged狀態, 使用git checkout 則丟棄修改過, 返回到unmodify狀態, 這個git checkout即從庫中取出文件, 覆蓋當前修改

  • Staged: 暫存狀態. 執行git commit則將修改同步到庫中, 這時庫中的文件和本地文件又變爲一致, 文件爲Unmodify狀態. 執行git reset HEAD filename取消暫存, 文件狀態爲Modified

 總結

 

 忽略特殊文件.gitignore

在Git工做區的根目錄下建立一個特殊的.gitignore文件,而後把要忽略的文件名填進去,Git就會自動忽略這些文件

不須要從頭寫.gitignore文件,GitHub已經爲咱們準備了各類配置文件,只須要組合一下就可使用了。全部配置文件能夠直接在線瀏覽:https://github.com/github/gitignore

忽略文件的原則是:

  1. 忽略操做系統自動生成的文件,好比縮略圖等;
  2. 忽略編譯生成的中間文件、可執行文件等,也就是若是一個文件是經過另外一個文件自動生成的,那自動生成的文件就不必放進版本庫,好比Java編譯產生的.class文件;
  3. 忽略你本身的帶有敏感信息的配置文件,好比存放口令的配置文件。
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.gitignore

最後一步就是把.gitignore也提交到Git,就完成了!

相關文章
相關標籤/搜索