!(http://upload-images.jianshu.io/upload_images/3780525-5ba3c246a7db25e1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
注:圖片鏈接http://www.ruanyifeng.com/blog/2014/06/git_remote.html瓜客。 侵權(quán)刪
本地項目上傳到 Github
例如:使用命令行工具創(chuàng)建一名為 blog的project,推送到自己的 Github
1.新建本地blog倉庫
mkdir blog
cd blog
touch readme.txt
//以上三步操作的是workspace
git init
git add readme.txt //git add .提交當(dāng)前文件前所有新增文件
git commit readme.txt -m "commit log description" //可提交多個文件
//以上操作是將workspace的文件上傳到本地倉庫
注:
-
git init
將woksapce變成repository颤诀,當(dāng)前文件下多了.git文件夾。**clone遠(yuǎn)程代碼倉庫到本地的時候先馆,自帶.git文件夾栋荸,不再需要git init ** -
git add
把文件添加到暫存區(qū)index
(俗稱stage) -
git commit
提交更改豪娜,把暫存區(qū)的所有內(nèi)容提交到當(dāng)前本地repository
與SVN比較:
git是commit到本地倉庫,svn是commit到遠(yuǎn)程服務(wù)器棚蓄。svn沒有上圖中pull堕扶、fetch/clone、push梭依、Repository稍算。git的優(yōu)勢在于,當(dāng)遠(yuǎn)程服務(wù)器duang掉時役拴,任何本地倉庫可以通過push操作恢復(fù)遠(yuǎn)程服務(wù)器上的倉庫糊探。但是svn沒有這樣的恢復(fù)機(jī)制
2.在github上新建一個同名的遠(yuǎn)程倉庫,并復(fù)制倉庫地址
注:創(chuàng)建完成后河闰,github顯示倉庫里面是空的科平,什么都沒有,只有當(dāng)你將本地倉庫的文件上傳姜性,才會顯示文件夾
3.把本地倉庫推送到遠(yuǎn)程倉庫
把本地倉庫文件推送到遠(yuǎn)程倉庫的必要條件是要將暫存區(qū)文件清空瞪慧。可以用commit命令將暫存區(qū)文件提交到本地倉庫部念,也可以用reset撤銷add的操作弃酌,將文件從暫存區(qū)移除
//本地倉庫連接到remote倉庫,并給remote地址取別名叫origin,以后推送就不需要再使用遠(yuǎn)程地址
git remote add origin remote倉庫名
//把本地倉庫的文件推送到遠(yuǎn)程倉庫儡炼。-u(--set-upstream)設(shè)置push分支妓湘,設(shè)置以后可直接使用git push命令
git push -u origin master
注:
- git remote -v //查看origin對應(yīng)名稱
- git push remote地址 master //不使用別名的推送命令
- git remote set-url origin remote地址 //給origin重新定位
從遠(yuǎn)程倉庫中下載項目文件到本地
git clone 遠(yuǎn)程倉庫名
git pull origin master 相當(dāng)于svn的update,在git里面相當(dāng)于執(zhí)行了git fetch之后與workspace代碼合并
創(chuàng)建branch
git branch 項目分支名 //創(chuàng)建分支
git checkout 項目分支名 //切換到剛剛新建的分支乌询。本次倉庫也會自動切換多柑。這樣就不需要為同一項目上衍生的多個小項目新建倉庫。svn就需要建立多個本地文件夾
git branch //查看當(dāng)前分支
git branch -a //查看所有的分支
git push origin 項目分支名 //將新建分支推送到遠(yuǎn)程倉庫
刪除文件
git rm filename
git add -A .
git commit -m "commit log descripition"
git push origin master //同步遠(yuǎn)程倉庫
注:本地錯誤刪除使用git reset --hard HEAD恢復(fù)文件
合并branch
git checkout master
git merge 項目分支名 //將新的分支合并到master分支
git push origin master //將合并后的master分支提交到遠(yuǎn)程倉庫
代碼回退
//暫存區(qū)回退
git checkout -- filename //文件一經(jīng)修改就進(jìn)入暫存區(qū)楣责。此命令是恢復(fù)文件竣灌,清除修改
//本地倉庫回退
git reset HEAD filename
git reset --hard HEAD //對未commit的被git接管的修改文件,不經(jīng)過checkout直接回到本地倉庫當(dāng)前版本秆麸,當(dāng)前修改丟失
git reset HEAD指針 //回退到本地倉庫指定版本初嘹。未commit的被git接管的修改文件,修改內(nèi)容不會丟失
//本地回退后沮趣,同步遠(yuǎn)程
git push origin master //協(xié)作開發(fā)時需謹(jǐn)慎
注:
1.HEAD指針在commit時會改變屯烦,通過git log命令查看之前的HEAD指針。用reset命令回到以前版本房铭,用checkout命令撤銷在當(dāng)前版本上還未commit的修改驻龟。
2.git reset HEAD filename
命令在文件第一次add進(jìn)暫存區(qū),還未commit時有效缸匪,相當(dāng)于解除git對該文件的管理翁狐。已經(jīng)在git管轄范圍里,對修改的文件進(jìn)行撤銷無效凌蔬,因為文件沒有commit露懒,HEAD指針沒有改變。此時的撤銷修改請用git checkout
命令.
//遠(yuǎn)程倉庫回退
常用查看信息的命令:
- git status 隨時關(guān)注當(dāng)前文件夾下文件的修改狀況
- 增加了新文件
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
//未追蹤文件
Untracked files:
//使用命令git add將新文件add進(jìn)需要commit的陣列
(use "git add <file>..." to include in what will be committed)
test.txt
//沒有文件需要commit砂心,但是有還沒有確定路徑的文件懈词,請用git add添加
nothing added to commit but untracked files present (use "git add" to track)
- 修改了原來已有的文件(相當(dāng)于把文件從本地倉庫移到了暫存區(qū)),但是還未commit
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
//使用git add命令更新需要commit的文件
(use "git add <file>..." to update what will be committed)
//使用git checkout命令撤銷修改
(use "git checkout -- <file>..." to discard changes in working directory)
modified: index.html
//沒有新文件需要add辩诞,然后commit
no changes added to commit (use "git add" and/or "git commit -a")
注:
1.新增文件第一次add之后坎弯,還沒commit之前,可用git reset HEAD filename
命令撤銷译暂,解除新增文件和git之間的關(guān)系抠忘,新增文件從暫存區(qū)移除,即把staged文件變?yōu)閡ntracked文件秧秉。
2.已經(jīng)被git接管的文件褐桌,一經(jīng)修改,該文件進(jìn)入暫存區(qū)象迎,提交到本地倉庫時荧嵌,可以不需要再使用add命令。
3.已經(jīng)被git接管的文件砾淌,修改后啦撮,沒commit之前用git checkout -- filename
命令撤銷本地文件修改,即將暫存區(qū)的文件恢復(fù)到之前狀態(tài)汪厨,清空暫存區(qū)赃春。
-
git diff
顧名思義就是查看difference,顯示的格式正是Unix通用的diff格式劫乱。 -
git log
命令顯示從最近到最遠(yuǎn)的提交日志织中,我們可以看到3次提交锥涕,最近的一次是append GPL,上一次是add distributed狭吼,最早的一次是wrote a readme file层坠。 -
git reflog
所有改動日志