Git init? 在當(dāng)前目錄下初始化創(chuàng)建Git倉庫 先要cd
Git add .? 將所有修改添加到暫存區(qū)
git add?+?文件
git add * # Ant風(fēng)格添加修改
git mergetool 合并中沖突 修復(fù)工具
$ git add *Controller? # 將以Controller結(jié)尾的文件的所有修改添加到暫存區(qū)
$ git add Hello*? # 將所有以Hello開頭的文件的修改添加到暫存區(qū) 例如:HelloWorld.txt,Hello.java,HelloGit.txt ...
$ git add Hello?? # 將以Hello開頭后面只有一位的文件的修改提交到暫存區(qū) 例如:Hello1.txt,HelloA.java 如果是HelloGit.txt或者Hello.java是不會被添加的
git add?-u?+?路徑:將修改過的被跟蹤代碼提交緩存
git add?-A?+?路徑:?將修改過的未被跟蹤的代碼提交至緩存
?Git reflog: 查看歷史所有的本地倉庫執(zhí)行改變的命令可以查找到headerID
?Git status 查看倉庫文件的狀態(tài)? 是否在緩存區(qū)? 綠色表示在緩存區(qū) 可以直接提交 紅色 表示在工作區(qū) 不能直接提交 需要git add? 添加到緩存區(qū)后 才能 Git commit 提交到Git本地倉庫屠缭,注意文件只有在緩存區(qū)才能提交。文件有下面3種狀態(tài):
1:Untracked: 未跟蹤, 此文件在文件夾中, 但并沒有加入到git庫, 不參與版本控制. 通過git add 狀態(tài)變?yōu)镾taged.
2:Modified: 文件已修改, 僅僅是修改, 并沒有進行其他的操作.
3:deleted: 文件已刪除崭参,本地刪除呵曹,服務(wù)器上還沒有刪除.
Git commit -m ‘? 注釋 此次提交的內(nèi)容 ’? ? 提交到本地Git倉庫
Git remote add origin https://github.com/ganghongli/dpsSale.git? ?與遠程倉庫建立聯(lián)系??
Git push -u origin master? ? 把修改過的代碼提交到 遠程倉庫 分支 master下面 master 表示分支 也可以是其他分支?
Git push origin master? ? ?提交本地倉庫的代碼到遠程倉庫分支 master 下面
it merge [name] ----將名稱為[name]的分支與當(dāng)前分支合并
查看分支:git branch?
創(chuàng)建分支:git branch?<分支>
切換分支:git checkout?<分支>
創(chuàng)建+切換分支:git checkout -b <分支>
合并某分支到當(dāng)前分支:git merge?<分支>
刪除分支:git branch -d?<分支>
刪除遠程分支:git push origin? :<分支>
合并指定dev分支到當(dāng)前分支:git? merge dev (注意先切換到當(dāng)前分支 在合并摸個分支)
查看本地對應(yīng)的遠程倉庫?git remote -v
查看遠程倉庫的本地代名詞 git remote?
從遠程倉庫拉取代碼并且合并本地代碼:Git pull origin master
從遠程倉庫拉取代碼不合并本地代碼:Git fetch origin master
從遠程倉庫克隆代碼等同于下載遠程所有文件包含Git文件 :Git clone +遠程倉庫地址 cloning into '本地文件夾路徑‘
查看標簽:Git tag
創(chuàng)建標簽 Git tag v1.0? (注意:標簽總是和某個commit掛鉤。如果這個commit既出現(xiàn)在master分支何暮,又出現(xiàn)在dev分支奄喂,那么在這兩個分支上都可以看到這個標簽)
?在歷史commit ID上打標簽 Git tag v1.0 + headerID(提交的headerID)
查看Header ID : git log --pretty=oneline --abbrev-commit
查看歷史所有的本地倉庫執(zhí)行改變的命令可以查找到headerID:Git reflog
刪除本地標簽:Git tag -d v1.0?
推送標簽到遠程:git push origin v1.0
刪除遠程標簽:先本地刪除 Git tag -d v1.0? 然后遠程刪除 Git push origin :tags/v1.0
推送所有標簽到遠程:Git push origin --tags
撤銷提交? :寫完代碼后,我們一般這樣git add . //添加所有文件git commit -m "本功能全部完成"?執(zhí)行完commit后海洼,想撤回commit跨新,怎么辦?使用:“Git reset --參數(shù) + headerID”指令
如Git reset --soft + headerID?注意坏逢,這僅僅是撤回commit操作域帐,您寫的代碼仍然保留。
git reset 后面參數(shù)的說明
Git reset --mixed + headerID??意思是:不刪除工作空間改動代碼是整,撤銷commit肖揣,并且撤銷git add . 操作這個為默認參數(shù),git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一樣的。
git reset --hard +headerID? 刪除工作空間改動代碼浮入,撤銷commit龙优,撤銷git add . 注意完成這個操作后,就恢復(fù)到了上一次的commit狀態(tài)事秀。
Git reset -- soft +headerID??不刪除工作空間改動代碼彤断,撤銷commit,不撤銷git add .?
Git 修改已提交的commit注釋 分2種情況 1易迹,已經(jīng)push到遠程 2.還未push到遠程
如果你只想修改最后一次注釋就是最新的一次提交 用git commit --amend? 會出現(xiàn)有注釋的界面(你的注釋應(yīng)該顯示在第一行)瓦糟, 輸入i進入修改模式,修改好注釋后赴蝇,按Esc鍵 退出編輯模式菩浙,輸入:wq保存并退出。ok,修改完成劲蜻。
修改之前commit的?
git rebase -i HEAD~2?最后的數(shù)字2指的是顯示到倒數(shù)第幾次陆淀,你想修改哪條注釋 就把哪條注釋前面的pick換成edit。方法就是上面說的編輯方式:i---編輯先嬉,把pick換成edit---Esc---:wq.然后git commit --amend 修改注釋信息轧苫,修改后保存退出后Git rebase continue?其實這個原理我的理解就是先版本回退到你想修改的某次版本,然后修改當(dāng)前的commit注釋疫蔓,然后再回到本地最新的版本.
對于已經(jīng)push到遠程的修改 首先你需要你把最新的版本從遠程倉庫先pull下來含懊,然后按照上面的方式修改commit信息最后強制push到遠程git push --force origin dev
HEAD指向的版本就是當(dāng)前版本,因此衅胀,Git允許我們在版本的歷史之間穿梭岔乔,使用命令git reset --hard commit_id。
穿梭前滚躯,用git log可以查看提交歷史雏门,以便確定要回退到哪個版本。
要重返未來掸掏,用git reflog查看命令歷史茁影,以便確定要回到未來的哪個版本。git reset--hard HEAD^? ? ?HEAD表示當(dāng)前版本?上一個版本就是HEAD^丧凤,上上一個版本就是HEAD^^
1) 遠程倉庫相關(guān)命令
檢出倉庫:$ git clone git://github.com/jquery/jquery.git
查看遠程倉庫:$ git remote -v
添加遠程倉庫:$ git remote add [name] [url]
刪除遠程倉庫:$ git remote rm [name]
修改遠程倉庫:$ git remote set-url --push[name][newUrl]
拉取遠程倉庫:$ git pull [remoteName] [localBranchName]
推送遠程倉庫:$ git push [remoteName] [localBranchName]
2#使用如下命令添加遠程倉庫募闲。
git?remote?set-url?--add?oginin?http://192.168.100.54/git/gaoxing/gaoxTest.git
3#查看遠程倉庫情況≡复可以看到?github?遠程倉庫有兩個?push?地址蝇更。這種方法的好處是每次只需要?push?一次就行了。
---------------------
Git 忽略規(guī)則
詳細的忽略規(guī)則可以參考官方英文文檔
Git 忽略規(guī)則優(yōu)先級
在 .gitingore 文件中呼盆,每一行指定一個忽略規(guī)則年扩,Git 檢查忽略規(guī)則的時候有多個來源,它的優(yōu)先級如下(由高到低):
從命令行中讀取可用的忽略規(guī)則
當(dāng)前目錄定義的規(guī)則
父級目錄定義的規(guī)則访圃,依次遞推
$GIT_DIR/info/exclude 文件中定義的規(guī)則
core.excludesfile中定義的全局規(guī)則
Git 忽略規(guī)則匹配語法
在 .gitignore 文件中厨幻,每一行的忽略規(guī)則的語法如下:
空格不匹配任意文件,可作為分隔符腿时,可用反斜杠轉(zhuǎn)義
# 開頭的文件標識注釋况脆,可以使用反斜杠進行轉(zhuǎn)義
! 開頭的模式標識否定,該文件將會再次被包含批糟,如果排除了該文件的父級目錄格了,則使用 ! 也不會再次被包含』斩Γ可以使用反斜杠進行轉(zhuǎn)義
/ 結(jié)束的模式只匹配文件夾以及在該文件夾路徑下的內(nèi)容盛末,但是不匹配該文件
/ 開始的模式匹配項目跟目錄
如果一個模式不包含斜杠弹惦,則它匹配相對于當(dāng)前 .gitignore 文件路徑的內(nèi)容,如果該模式不在 .gitignore 文件中悄但,則相對于項目根目錄
** 匹配多級目錄棠隐,可在開始,中間檐嚣,結(jié)束
? 通用匹配單個字符
[] 通用匹配單個字符列表
常用匹配示例:
bin/: 忽略當(dāng)前路徑下的bin文件夾助泽,該文件夾下的所有內(nèi)容都會被忽略,不忽略 bin 文件
/bin: 忽略根目錄下的bin文件
/*.c: 忽略 cat.c嚎京,不忽略 build/cat.c
debug/*.obj: 忽略 debug/io.obj嗡贺,不忽略 debug/common/io.obj 和 tools/debug/io.obj
**/foo: 忽略/foo, a/foo, a/b/foo等
a/**/b: 忽略a/b, a/x/b, a/x/y/b等
!/bin/run.sh: 不忽略 bin 目錄下的 run.sh 文件
*.log: 忽略所有 .log 文件
config.php: 忽略當(dāng)前路徑的 config.php 文件
.gitignore規(guī)則不生效
.gitignore只能忽略那些原來沒有被track的文件,如果某些文件已經(jīng)被納入了版本管理中鞍帝,則修改.gitignore是無效的诫睬。
解決方法就是先把本地緩存刪除(改變成未track狀態(tài)),然后再提交:
git rm -r --cached .gitadd .git commit -m'update .gitignore'
2)分支(branch)操作相關(guān)命令
查看本地分支:$ git branch
查看遠程分支:$ git branch -r
創(chuàng)建本地分支:$ git branch [name] ----注意新分支創(chuàng)建后不會自動切換為當(dāng)前分支
切換分支:$ git checkout [name]
創(chuàng)建新分支并立即切換到新分支:$ git checkout -b [name]
刪除分支:$ git branch -d [name] ---- -d選項只能刪除已經(jīng)參與了合并的分支膜眠,對于未有合并的分支是無法刪除的。如果想強制刪除一個分支溜嗜,可以使用-D選項
合并分支:$ git merge [name] ----將名稱為[name]的分支與當(dāng)前分支合并
push遠程分支(本地分支push到遠程):$ git push origin [name]
刪除遠程分支:$ git push origin :heads/[name]
我從master分支創(chuàng)建了一個issue5560分支宵膨,做了一些修改后,使用git push origin master提交炸宵,但是顯示的結(jié)果卻是'Everything up-to-date'辟躏,發(fā)生問題的原因是git push origin master 在沒有track遠程分支的本地分支中默認提交的master分支,因為master分支默認指向了origin master 分支土全,這里要使用git push origin issue5560:master 就可以把issue5560推送到遠程的master分支了捎琐。
如果想把本地的某個分支test提交到遠程倉庫,并作為遠程倉庫的master分支裹匙,或者作為另外一個名叫test的分支瑞凑,那么可以這么做。
$ git push origin test:master // 提交本地test分支作為遠程的master分支 //好像只寫這一句概页,遠程的github就會自動創(chuàng)建一個test分支
$ git push origin test:test // 提交本地test分支作為遠程的test分支
如果想刪除遠程的分支呢籽御?類似于上面,如果:左邊的分支為空惰匙,那么將刪除:右邊的遠程的分支技掏。
$ git push origin :test // 剛提交到遠程的test將被刪除,但是本地還會保存的项鬼,不用擔(dān)心
3)版本(tag)操作相關(guān)命令
查看版本:$ git tag
創(chuàng)建版本:$ git tag [name]
刪除版本:$ git tag -d [name]
查看遠程版本:$ git tag -r
創(chuàng)建遠程版本(本地版本push到遠程):$ git push origin [name]
刪除遠程版本:$ git push origin :refs/tags/[name]
推送所有tag: git push origin --tags
tag遷出branch:
git checkout tagname
git checkout -b new_branch_name
4)git stash暫存相關(guān)命令
git stash: 備份當(dāng)前的工作區(qū)的內(nèi)容哑梳,從最近的一次提交中讀取相關(guān)內(nèi)容,讓工作區(qū)保證和上次提交的內(nèi)容一致绘盟。同時鸠真,將當(dāng)前的工作區(qū)內(nèi)容保存到Git棧中悯仙。
git stash pop: 從Git棧中讀取最近一次保存的內(nèi)容,恢復(fù)工作區(qū)的相關(guān)內(nèi)容弧哎。由于可能存在多個Stash的內(nèi)容雁比,所以用棧來管理,pop會從最近的一個stash中讀取內(nèi)容并恢復(fù)撤嫩。
git stash list: 顯示Git棧內(nèi)的所有備份偎捎,可以利用這個列表來決定從那個地方恢復(fù)。
git stash clear: 清空Git棧序攘。此時使用gitg等圖形化工具會發(fā)現(xiàn)茴她,原來stash的哪些節(jié)點都消失了。
顯示提交的log
git log
$ git log --pretty=oneline
$ git log --pretty=format:"%h - %an, %ar : %s"
--也可以指定查看的個數(shù)
git log -3
回退命令:
--回退到上個版本
$ git reset --hard HEAD^
--回退到前3次提交之前程奠,以此類推丈牢,回退到n次提交之前
$ git reset --hard HEAD~3
-- *退到/進到 指定commit的sha碼,sha碼通過上面的 log 命令獲取
$ git reset --hard commit_id
強推到遠程:
作者:楓林風(fēng)雨
鏈接:http://www.reibang.com/p/ec7e8ed1dfcb
來源:簡書
簡書著作權(quán)歸作者所有瞄沙,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處己沛。
5)git rebase 使用
當(dāng)前分支問題develop,從master拉取最新代碼
git pull --rebase origin master 或者 git rebase develop
先將develop分支的代碼checkout出來距境,作為工作目錄
然后將master分支從develop分支創(chuàng)建起的所有改變的補丁申尼,依次打上。如果打補丁的過程沒問題垫桂,rebase就搞定了
如果打補丁的時候出現(xiàn)了問題师幕,就會提示你處理沖突。處理好了诬滩,可以運行g(shù)it rebase –continue繼續(xù)直到完成
如果你不想處理霹粥,你還是有兩個選擇,一個是放棄rebase過程(運行g(shù)it rebase –abort)疼鸟,另一個是直接用test分支的取代當(dāng)前分支的(git rebase –skip)后控。