[ [ [轉載] http://blog.csdn.net/techbirds_bao/article/details/9179853
Git 倉庫就是那個.git 目錄,其中存放的是我們所提交的文檔索引內容,Git 可基于文檔索引內容對其所管理的文檔進行內容追蹤,從而實現文檔的版本控制。.git目錄位于工作目錄內。 對于任何一個文件,在 Git 內都只有三種狀態:已修改(modified),已暫存(staged)和已提交(committed)。
Git的三種狀態:
1.Change(Unstaged):你改動了一個,沒有調用任何git命令前,就是這種狀態。2.Staged暫存區:調用git add或者git commit -a之后,進入Staged狀態,表示申明要變動了。3.Committed:Commit,生成新的版本commit號,進入此狀態。常見狀態提示:
1.nothing to commit (working directory clean): 所有已跟蹤文件在上次提交后都未被更改過2.Untracked files: 未跟蹤文件3.Changes to be committed: 已跟蹤文件(在添加add命令之后的文件與修改后又添加add命令之后的文件)4.Changes not staged for commit:已跟蹤文件的內容發生了變化,但還沒有放到暫存區,這樣狀態的文件即使Commit上去也只是Commit暫存區的版本而不是改文件最新版本若編輯修改已暫存的文件,后運行git status會出現暫存前后的兩個版本(Change和Staged),若此時Commit,則只會同步已暫存(Staged)的那個版本,而不會同步暫存后修改的部分。若要同步暫存后修改的部分,應重新add該文件。
提交時記錄的是放在暫存區域的快照,任何還未暫存的仍然保持已修改狀態,可以在下次提交時納入版本管理。
在 Git 中,HEAD是一個指向你正在工作中的本地分支的指針(將 HEAD 想象為當前分支的別名。)
任何包含未解決沖突的文件都會以未合并(unmerged)的狀態列出。可以使用git mergetool使用圖形工具引導合并解決沖突。
[舉例] 1)、 為PD-based-on-pc項目新建一個遠程origin倉庫
$ git remote add origin git@git.coding.net:Yunpentium/PD-based-on-pc.git2)、 把本地master分支的內容推送到遠程的origin倉庫
$ git push origin master[舉例] 我從本地master分支創建了一個本地issue5560分支,做了一些修改后,使用git push origin master提交,但是顯示的結果卻是’Everything up-to-date’。發生問題的原因是git push origin master中,本地master分支默認指向了遠程的origin/master 分支,所以這里要使用git push origin issue5560:master 就可以指明是把本地的issue5560推送到遠程的origin/master分支了。
如果想把本地的某個分支test提交到遠程倉庫,并作為遠程倉庫的master分支,或者作為另外一個名叫test的分支,那么可以這么做。
$ git push origin test:master // 提交本地test分支作為遠程的master分支 $ git push origin test:test // 提交本地test分支作為遠程的test分支如果想刪除遠程的分支呢?類似于上面,如果:左邊的分支為空,那么將刪除:右邊的遠程的分支。
$ git push origin :test // 剛提交到遠程的test將被刪除,但是本地還會保存的,不用擔心Git 使用的標簽有兩種類型:輕量級的(lightweight)和含附注的(annotated)
查看版本:$ git tag創建版本:$ git tag [name]刪除版本:$ git tag -d [name]查看遠程版本:$ git tag -r創建遠程版本(本地版本push到遠程):$ git push origin [name]刪除遠程版本:$ git push origin :refs/tags/[name][舉例]
$git tag -a v1.4 -m 'my version 1.4' //新建一個含附注(-a)的標簽$git tag v1.5#新建一個輕量級標簽$git show v1.1 #查看相應標簽的版本信息如:$ git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs
初始化子模塊:$ git submodule init ----只在首次檢出倉庫時運行一次就行更新子模塊:$ git submodule update ----每次更新或切換分支后都需要運行一下刪除子模塊:(分4步走哦)1)$ git rm --cached [path] 2) 編輯“.gitmodules”文件,將子模塊的相關配置節點刪除掉 3) 編輯“.git/config”文件,將子模塊的相關配置節點刪除掉 4) 手動刪除子模塊殘留的目錄 5)忽略一些文件、文件夾不提交在倉庫根目錄下創建名稱為“.gitignore”的文件,寫入不需要的文件夾名或文件,每個元素占一行即可,如targetbin*.db運行了 git add 之后又修改了本地文件,需要重新運行 git add 把最新版本重新暫存起來。
add添加到暫存區的文件,git才會監控它的變化。在Unstaged狀態的文件變化并不會在命令行中體現出來。
$ git add octocat.txt //把文件從change->staged狀態(修改現有文件也要git add來修改狀態)$ git add /home/root/aaa/*#(當前目錄下所有的更新)$ git reset HEAD gitTest.txt #取消已add到暫存區的文件(與add執行相反的操作)usage: git clone [options] [–] [
參數挺多,但常用的就幾個:
1)、最簡單直接的命令
git clone xxx.git2)、 如果想clone到指定目錄
git clone xxx.git "指定目錄"3)、 clone時創建新的分支替代默認Origin HEAD(master)
git clone -b [new_branch_name] xxx.git4)、 clone 遠程分支
git clone 命令默認的只會建立master分支,如果你想clone指定的某一遠程分支(如:dev)的話,可以如下:
A. 查看所有分支(包括隱藏的) git branch -a 顯示所有分支,如:
master remotes/origin/HEAD -> origin/master remotes/origin/dev remotes/origin/masterB. 在本地新建同名的(“dev”)分支,并切換到該分支
git checkout -t origin/dev 該命令等同于:git checkout -b dev origin/dev如果已暫存了所有修改過的文件,后運行git diff會什么都沒有(因為該命令顯示的是當前文件與暫存文件之間的差異)
$git diff//查看文件被修改之后還沒有暫存起來的變化內容,顯示的是與上次暫存文件的差異$git diff test //顯示當前目錄和另一個叫'test'分支的差別$git diff --cached //查看已經暫存起來的文件和上次提交時的快照之間的差異$git diff --staged //同上新聞熱點
疑難解答