㈠ Git分支,為何以及如何使用分支
幾乎每一種版本控制系統都以某種形式支持分支。使用分支意味著你可以從開發主線上分離開來,然後在不影響主線的同時繼續工作。在很多版本控制系統中,這是個昂貴的過程,常常需要創建一個源代碼目錄的完整副本,對大型項目來說會花費很長時間。
有人把 Git 的分支模型稱為「必殺技特性」,而正是因為它,將 Git 從版本控制系統家族裡區分出來。Git 有何特別之處呢?Git 的分支可謂是難以置信的輕量級,它的新建操作幾乎可以在瞬間完成,並且在不同分支間切換起來也差不多一樣快。和許多其他版本控制系統不同,Git 鼓勵在工作流程中頻繁使用分支與合並,哪怕一天之內進行許多次都沒有關系。理解分支的概念並熟練運用後,你才會意識到為什麼 Git 是一個如此強大而獨特的工具,並從此真正改變你的開發方式。
為了理解 Git 分支的實現方式,我們需要回顧一下 Git 是如何儲存數據的。或許你還記得第一章的內容,Git 保存的不是文件差異或者變化量,而只是一系列文件快照。
在 Git 中提交時,會保存一個提交(commit)對象,該對象包含一個指向暫存內容快照的指針,包含本次提交的作者等相關附屬信息,包含零個或多個指向該提交對 象的父對象指針:首次提交是沒有直接祖先的,普通提交有一個祖先,由兩個或多個分支合並產生的提交則有多個祖先。
為直觀起見,我們假設在工作目錄中有三個文件,准備將它們暫存後提交。暫存操作會對每一個文件計算校驗和(即第一章中提到的 SHA-1 哈希字串),然後把當前版本的文件快照保存到 Git 倉庫中(Git 使用 blob 類型的對象存儲這些快照),並將校驗和加入暫存區域:
$ git add README test.rb LICENSE$ git commit -m 'initial commit of my project'
當使用git commit新建一個提交對象前,Git 會先計算每一個子目錄(本例中就是項目根目錄)的校驗和,然後在 Git 倉庫中將這些目錄保存為樹(tree)對象。之後 Git 創建的提交對象,除了包含相關提交信息以外,還包含著指向這個樹對象(項目根目錄)的指針,如此它就可以在將來需要的時候,重現此次快照的內容了。
現在,Git 倉庫中有五個對象:三個表示文件快照內容的 blob 對象;一個記錄著目錄樹內容及其中各個文件對應 blob 對象索引的 tree 對象;以及一個包含指向 tree 對象(根目錄)的索引和其他提交信息元數據的 commit 對象。概念上來說,倉庫中的各個對象保存的數據和相互關系看起來如圖 3-1 所示:
圖 3-8. HEAD 在一次 checkout 之後移動到了另一個分支
這條命令做了兩件事。它把 HEAD 指針移回到 master 分支,並把工作目錄中的文件換成了 master 分支所指向的快照內容。也就是說,現在開始所做的改動,將始於本項目中一個較老的版本。它的主要作用是將 testing 分支里作出的修改暫時取消,這樣你就可以向另一個方向進行開發。
㈡ Android studio怎麼創建Git分支,創建遠程分支
方式一:命令行 git push origin <branch-name>,branch-name就是你要新建的遠程branch的名稱。你可以用git bash或者Android Studio中的Terminal敲命令行。
方式二:直接通過Android Studio來創建遠程branch,很簡單,一步就可以了。我直接上圖:
下面圖中你看到遠程的branch就兩個:master和nick
㈢ git如何切換分支命令
(一).創建本地分支
git checkout -b新分支名。
執行該指令後,會在本地創建一個新分支,該分支是從當前分支上檢出的,所以所有文件內容都和當前分支一模一樣,這是正常的。創建成功後,將自動切換至新分支上。
比如我要創建一個名為dev1的新分支:
三、將遠程git倉庫里的指定分支拉取到本地(本地不存在的分支)
當我想從遠程倉庫里拉取一條本地不存在的分支時。
git checkout -b本地分支名origin/遠程分支名。
這個將會自動創建一個新的本地分支,並與指定的遠程分支關聯起來。
例如遠程倉庫里有個分支dev2,我本地沒有該分支,我要把dev2拉到我本地。
若成功,將會在本地創建新分支dev2,並自動切到dev2上。
如果出現提示:
fatal: Cannot update paths and switch to branch 'dev2' at the same time.
Did you intend to checkout 'origin/dev2' which can not be resolved as commit?
表示拉取不成功。我們需要先執行。
㈣ GIT怎麼控制用戶能不能強制PUSH或者DELETE分支、創建分支
Git是一個很強大的分布式版本管理工具,它不但適用於管理大型開源軟體的源代碼(如:linuxkernel),管理私人的文檔和源代碼也有很多優勢(如:wsi-lgame-pro)
Git的更多介紹,請參考我的上一篇博客:Git版本管理工具
一、Git命令初識
在正式介紹Git命令之前,先介紹一下Git的基本命令和操作,對Git命令有一個總體的認識
示例:從Git版本庫的初始化,通常有兩種方式:
1)gitclone:這是一種較為簡單的初始化方式,當你已經有一個遠程的Git版本庫,只需要在本地克隆一份
例如:gitclonegit://github.com/someone/some_project.gitsome_project
上面的命令就是將'git://github.com/someone/some_project.git'這個URL地址的遠程版本庫,完全克隆到本地some_project目錄下
2)gitinit和gitremote:這種方式稍微復雜一些,當你本地創建了一個工作目錄,你可以進入這個目錄,使用'gitinit'命令進行初始化;Git以後就會對該目錄下的文件進行版本控制,這時候如果你需要將它放到遠程伺服器上,可以在遠程伺服器上創建一個目錄,並把可訪問的URL記錄下來,此時你就可以利用'gitremoteadd'命令來增加一個遠程伺服器端,
例如:gitremoteaddorigingit://github.com/someone/another_project.git
上面的命令就會增加URL地址為'git://github.com/someone/another_project.git',名稱為origin的遠程伺服器,以後提交代碼的時候只需要使用origin別名即可
二、Git常用命令
1)遠程倉庫相關命令
檢出倉庫:$gitclonegit://github.com/jQuery/jquery.git
查看遠程倉庫:$gitremote-v
添加遠程倉庫:$gitremoteadd[name][url]
刪除遠程倉庫:$gitremoterm[name]
修改遠程倉庫:$gitremoteset-url--push[name][newUrl]
拉取遠程倉庫:$gitpull[remoteName][localBranchName]
推送遠程倉庫:$gitpush[remoteName][localBranchName]
*如果想把本地的某個分支test提交到遠程倉庫,並作為遠程倉庫的master分支,或者作為另外一個名叫test的分支,如下:
$gitpushorigintest:master//提交本地test分支作為遠程的master分支
$gitpushorigintest:test//提交本地test分支作為遠程的test分支
2)分支(branch)操作相關命令
查看本地分支:$gitbranch
查看遠程分支:$gitbranch-r
創建本地分支:$gitbranch[name]----注意新分支創建後不會自動切換為當前分支
切換分支:$gitcheckout[name]
創建新分支並立即切換到新分支:$gitcheckout-b[name]
刪除分支:$gitbranch-d[name]-----d選項只能刪除已經參與了合並的分支,對於未有合並的分支是無法刪除的。如果想強制刪除一個分支,可以使用-D選項
合並分支:$gitmerge[name]----將名稱為[name]的分支與當前分支合並
創建遠程分支(本地分支push到遠程):$gitpushorigin[name]
刪除遠程分支:$gitpushorigin:heads/[name]或$gitpushorigin:[name]
*創建空的分支:(執行命令之前記得先提交你當前分支的修改,否則會被強制刪干凈沒得後悔)
$gitsymbolic-refHEADrefs/heads/[name]
$rm.git/index
$gitclean-fdx
3)版本(tag)操作相關命令
查看版本:$gittag
創建版本:$gittag[name]
刪除版本:$gittag-d[name]
查看遠程版本:$gittag-r
創建遠程版本(本地版本push到遠程):$gitpushorigin[name]
刪除遠程版本:$gitpushorigin:refs/tags/[name]
合並遠程倉庫的tag到本地:$gitpullorigin--tags
上傳本地tag到遠程倉庫:$gitpushorigin--tags
創建帶注釋的tag:$gittag-a[name]-m'yourMessage'
4)子模塊(submole)相關操作命令
添加子模塊:$gitsubmoleadd[url][path]
如:$gitsubmoleaddgit://github.com/soberh/ui-libs.gitsrc/main/webapp/ui-libs
初始化子模塊:$gitsubmoleinit----只在首次檢出倉庫時運行一次就行
更新子模塊:$gitsubmoleupdate----每次更新或切換分支後都需要運行一下
刪除子模塊:(分4步走哦)
1)$gitrm--cached[path]
2)編輯「.gitmoles」文件,將子模塊的相關配置節點刪除掉
3)編輯「.git/config」文件,將子模塊的相關配置節點刪除掉
4)手動刪除子模塊殘留的目錄
5)忽略一些文件、文件夾不提交
在倉庫根目錄下創建名稱為「.gitignore」的文件,寫入不需要的文件夾名或文件,每個元素佔一行即可,如
target
bin
*.db
三、Git命令詳解
現在我們有了本地和遠程的版本庫,讓我們來試著用用Git的基本命令:
gitpull:從其他的版本庫(既可以是遠程的也可以是本地的)將代碼更新到本地,例如:'gitpulloriginmaster'就是將origin這個版本庫的代碼更新到本地的master主枝,該功能類似於SVN的update
gitadd:是將當前更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示記入了版本歷史中,這也是提交之前所需要執行的一步,例如'gitaddapp/model/user.rb'就會增加app/model/user.rb文件到Git的索引中,該功能類似於SVN的add
gitrm:從當前的工作空間中和索引中刪除文件,例如'gitrmapp/model/user.rb',該功能類似於SVN的rm、del
gitcommit:提交當前工作空間的修改內容,類似於SVN的commit命令,例如'gitcommit-mstory#3,adsermodel',提交的時候必須用-m來輸入一條提交信息,該功能類似於SVN的commit
gitpush:將本地commit的代碼更新到遠程版本庫中,例如'gitpushorigin'就會將本地的代碼更新到名為orgin的遠程版本庫中
gitlog:查看歷史日誌,該功能類似於SVN的log
gitrevert:還原一個版本的修改,必須提供一個具體的Git版本號,例如'',Git的版本號都是生成的一個哈希值
上面的命令幾乎都是每個版本控制工具所公有的,下面就開始嘗試一下Git獨有的一些命令:
gitbranch:對分支的增、刪、查等操作,例如'gitbranchnew_branch'會從當前的工作版本創建一個叫做new_branch的新分支,'gitbranch-Dnew_branch'就會強制刪除叫做new_branch的分支,'gitbranch'就會列出本地所有的分支
gitcheckout:Git的checkout有兩個作用,其一是在不同的branch之間進行切換,例如'gitcheckoutnew_branch'就會切換到new_branch的分支上去;另一個功能是還原代碼的作用,例如'gitcheckoutapp/model/user.rb'就會將user.rb文件從上一個已提交的版本中更新回來,未提交的內容全部會回滾
gitrebase:用下面兩幅圖解釋會比較清楚一些,rebase命令執行後,實際上是將分支點從C移到了G,這樣分支也就具有了從C到G的功能
gitreset:將當前的工作目錄完全回滾到指定的版本號,假設如下圖,我們有A-G五次提交的版本,其中C的版本號是,我們執行了'gitreset'那麼結果就只剩下了A-C三個提交的版本
gitstash:將當前未提交的工作存入Git工作棧中,時機成熟的時候再應用回來,這里暫時提一下這個命令的用法,後面在技巧篇會重點講解
gitconfig:利用這個命令可以新增、更改Git的各種設置,例如'gitconfigbranch.master.remoteorigin'就將master的遠程版本庫設置為別名叫做origin版本庫,後面在技巧篇會利用這個命令個性化設置你的Git,為你打造獨一無二的Git
gittag:可以將某個具體的版本打上一個標簽,這樣你就不需要記憶復雜的版本號哈希值了,例如你可以使用'gittagrevert_version'來標記這個被你還原的版本,那麼以後你想查看該版本時,就可以使用revert_version標簽名,而不是哈希值了
Git之所以能夠提供方便的本地分支等特性,是與它的文件存儲機制有關的。Git存儲版本控制信息時使用它自己定義的一套文件系統存儲機制,在代碼根目錄下有一個.git文件夾,會有如下這樣的目錄結構:
有幾個比較重要的文件和目錄需要解釋一下:HEAD文件存放根節點的信息,其實目錄結構就表示一個樹型結構,Git採用這種樹形結構來存儲版本信息,那麼HEAD就表示根;refs目錄存儲了你在當前版本控制目錄下的各種不同引用(引用指的是你本地和遠程所用到的各個樹分支的信息),它有heads、remotes、stash、tags四個子目錄,分別存儲對不同的根、遠程版本庫、Git棧和標簽的四種引用,你可以通過命令'gitshow-ref'更清晰地查看引用信息;logs目錄根據不同的引用存儲了日誌信息。因此,Git只需要代碼根目錄下的這一個.git目錄就可以記錄完整的版本控制信息,而不是像SVN那樣根目錄和子目錄下都有.svn目錄。那麼下面就來看一下Git與SVN的區別吧
四、Git與SVN比較
SVN(Subversion)是當前使用最多的版本控制工具。與它相比較,Git最大的優勢在於兩點:易於本地增加分支和分布式的特性。
下面兩幅圖可以形象的展示Git與SVN的不同之處:
------------
1)本地增加分支
圖中Git本地和伺服器端結構都很靈活,所有版本都存儲在一個目錄中,你只需要進行分支的切換即可達到在某個分支工作的效果
而SVN則完全不同,如果你需要在本地試驗一些自己的代碼,只能本地維護多個不同的拷貝,每個拷貝對應一個SVN伺服器地址
舉一個實際的例子:
使用SVN作為版本控制工具,當正在試圖增強一個模塊,工作做到一半,由於會改變原模塊的行為導致代碼伺服器上許多測試的失敗,所以並沒有提交代碼。
這時候假如現在有一個很緊急的Bug需要處理,必須在兩個小時內完成。我只好將本地的所有修改diff,並輸出成為一個patch文件,然後回滾有關當前任務的所有代碼,再開始修改Bug的任務,等到修改好後,在將patch應用回來。前前後後要完成多個繁瑣的步驟,這還不計中間代碼發生沖突所要進行的工作量。
可是如果使用Git,我們只需要開一個分支或者轉回到主分支上,就可以隨時開始Bug修改的任務,完成之後,只要切換到原來的分支就可以優雅的繼續以前的任務。只要你願意,每一個新的任務都可以開一個分支,完成後,再將它合並到主分支上,輕松而優雅。
2)分布式提交
Git可以本地提交代碼,所以在上面的圖中,Git有利於將一個大任務分解,進行本地的多次提交
而SVN只能在本地進行大量的一次性更改,導致將來合並到主幹上造成巨大的風險
3)日誌查看
Git的代碼日誌是在本地的,可以隨時查看
SVN的日誌在伺服器上的,每次查看日誌需要先從伺服器上下載下來
例如:代碼伺服器在美國,當每次查看幾年前所做的工作時,日誌下載可能需要十分鍾,這不能不說是一個痛苦。但是如果遷移到Git上,利用Git日誌在本地的特性,查看某個具體任務的所有代碼歷史,每次只需要幾秒鍾,大大方便了工作,提高了效率。
當然分布式並不是說用了Git就不需要一個代碼中心伺服器,如果你工作在一個團隊里,還是需要一個伺服器來保存所有的代碼的。
㈤ 如何使用git創建項目,創建分支
git config -global user.name "Your name"git config -global user.email "[email protected]"建立一個存放工程的文件夾git init命令用於初始化當前所在目錄的這個項目會創建一個隱藏文件 .git創建main.c 文件創建.gitignore文件,忽略該文件裡面有的項目文件git status 查看項目狀態git add .. 給我目前的這個項目製作一個快照snapshot(快照只是登記留名,快照不等於記錄在案,git管快照叫做索引index)git commit用於將快照里登記的內容永久寫入git倉庫中,也就是開發者已經想好了要提交自己的開發成果了。要說一句:切記寫開發日誌的時候,第一行一定要是少於50字的開發概括信息,而且第二行務必是空行,第三行開始才可以開始細致描述開發信息。這是因為很多版本服務系統中的email機制都會選取log中的第一行為郵件題目。git commit -a這個命令可以直接提交所有修改,省去了你git add和git diff和git commit的工序注意:無法把新增文件或文件夾加入進來,所以,如果你新增了文件或文件夾,那麼就要老老實實的先git add .,再git commitgit log -p如果你覺得git log給出的信息太單薄了,可以使用git log -p,這樣git不但會給出開發日誌,而且會顯示每個開發版本的代碼區別所在。總結:先git add你修改過的文件,再git diff並git status查看確認,然後git commit提交,然後輸入你的開發日誌,最後git log再次確認。創建分支git branch experiment 創建一個分支直接輸入git branch,不加任何後續參數,就表示讓git列出所有已存在的分支。前面帶「星號」的分支表示當前所在的分支。
㈥ 如何在Git上創建子分支
在使用Git平台時,為了不污染我們的主分支,我們一般都拷貝一個master的副本(創 建分支),然後修改副本的代碼,這樣我們一直操作的就不是 master分支,而是master分支的副本了。我們將這個副本分支稱之為」子分支」。
方法/步驟
1
點擊Git Flow 創建分支:
1. develop : 創建一個develop分支,在develop分支上進行開發
2. feature : 然後在develop上附屬創建一些特性分支,比比如我們可 以為登陸功能創建一個login分支,為注冊功能創建一個register分支, 為用戶管 理創建一個user分支,這些功能分支都屬於feature分支
3. release : 我們每次產品發布時都會將代碼更新到master上進行打 包上傳,然後更新打包代碼到release分支上,這樣就可以在以後只查 看釋放 分支來查看每次上線時產品的代碼了.
4. hotfix : 在代碼更新到master分支後,突然發現代碼中有bug,這是 我們直接創建一個熱修復分支,改完這個bug後立即更新到master分 支了.
㈦ github怎麼創建分支 合並分支
前置條件,github上面已有庫項目Repository (MyFirstGitProject)
第一種情況:你的項目還沒跟github目標庫MyFirstGitProject建立連接:
1.cd C:\Users\Administrator\Desktop\MyProject //進入到你要提交的項目文件夾
2. git init //這是初始化在這個文件夾中建立一個空庫
3.git add //這個命令 你可以直接 git add . 這是把當前文件夾中的所有文件都加入到上傳的列表中(注意要有空格),你還可以添加具體的文件 git add 你要添加的文件
(輸入ls命令回車,你可以查看C:\Users\Administrator\Desktop\MyProject下面的文件)
4.git commit -m "更新內容說明""
5.git remote add origin https://github.com/waitForWind/MyFirstGitProject.git //這里說兩處地方 origin 這個相當於是個別名 你可以自己隨便寫也可以寫成當前文件夾的名 , 後面的地址是你在GITHUB 剛剛新建的 庫 地址, 你建了哪幾個庫,你到GITHUB找到 你 建的庫點進去 就能看到相應的地址.
6.git push -u origin master //開始上傳了 ,然後 會提示你 輸入 你在 GITHUB上注冊的用戶名跟密碼 輸入正確後就等著上傳吧
第二種情況:更新代碼的操作(不是第一次提交)
1.cd C:\Users\Administrator\Desktop\MyProject //進入到你要提交的項目文件夾
2.git add . //或者添加具體的文件 git add 你要添加的文件
3.git commit -m "說明"
4.git push -u origin master 真正開始上傳代碼到github //還記的這個別名嗎 origin 這個別名就是你用第一種方法首次 向 GITHUB提交代碼 你用的 別名
㈧ git 怎麼在本地創建一個分支並拉取遠程分支
使用如下命令:
git checkout -b 本地分支名x origin/遠程分支名x1
使用該方式會在本地新建分支x,並自動切換到該本地分支x。
採用此種方法建立的本地分支會和遠程分支建立映射關系。
㈨ 怎樣用git創建分支並上傳代碼
怎樣用git創建分支並上傳代碼
先存放a[0]行,再存放a[1]行,最後存放a[2]行。每行中有四個元素也是依次存放。由於數組a說明為int類型,該類型占兩個位元組的內存空間,所以每個元素均佔有兩個位元組)。
7.2.2 二維數組元素的引用
二維數組的元素也稱為雙下標變數,其表示的形式為:
數組名[下標][下標]
其中下標應為整型常量或整型表達式。
例如:
a[3][4]
表示a數組三行四列的元素。
下標變數和數組說明在形式中有些相似,但這兩者具有完全不同的含義。數組說明的方括弧中給出的是某一維的長度,即可取下標的最大值;而數組元素中的下標是該元素在數組中的位置標識。前者只能是常量,後者可以是常量,變數或表達式。
【例7.6】一個學習小組有5個人,每個人有三門課的考試成績。求全組分科的平均成績和各科總平均成績。
㈩ git branch管理常用命令
git
branch管理常用命令查看本地分支[plain]git
branch
*
dev
master
*代表當前位於dev分支查看遠程分支[plain]git
branch
--remote
origin/dev
origin/master
創建分支[plain]git
checkout
-b
new_branch
注意,new_branch的代碼來自於當前分支切換分支[plain]git
checkout
another_branch
和創建分支就差-b參數push本地分支代碼到遠端伺服器[plain]git
push
origin
branch_name
如果遠端伺服器沒有該分支,將會自動創建pull遠端分支代碼到本地對應分支[plain]git
pull
origin
branch_name
刪除本地分支,首先切換到別的分支,然後才能刪除某個分支[plain]git
checkout
b
git
branch
-d
a
刪除遠程分支[plain]git
push
origin
--delete
branch_name
合並本地分支[plain]git
merge
b
假設當前分支為dev,上面的命令就是將本地的b分支代碼合並到當前分支dev中合並遠程分支,和前面的幾乎一樣,[plain]git
merge
origin/b
遠程分支b被合並到本地當前分支dev中了。