git 常用使用及問題記錄
1、打開bash,進入工程根目錄(引用whaon的話:是和.classpath和.project同級的目錄)。PS:我的系統是win7,在bash切換到E的命令是 cd /e;
2、運行 git init 初始化代碼倉庫(repository)
3、運行git add .將該目錄下的所有文件全部提交到緩沖區
4、運行git commit -m "helloword init"將代碼提交到HEAD,此時還沒有提交到服務器
5、運行git remote add origin http://git.oschina.net/yourname/helloworld.git
6、git push origin master
其中第5和6步驟容易出現問題,lz就出現的問題和解決的方法列出
問題一:"NOT FOUND"
解決方法:正如前面所述,如果沒有在osc@git 上創建空項目就會出現這個問題
問題二:"![rejected] master -> master (fetch first)"
解決方法:看他的關鍵提示fetch first , 通過lz嘗試此問題順利解決
問題三:"![rejected] master -> master (non-fast-forward)
解決方法:還是同樣的提示,還是熟悉的味道自己看它的提示,哦,原來要我pull一下,好吧我就pull一下,結果說必須指定pull誰,最后通過嘗試終于把東東提交上去了。
修正:"git pull remote master" 改為 "git pull origin master"
git 遠程分支創建與推送
本地分支的創建
本地分支的來源為執行git checkout -b <branch name> 的那個分支
例如現在有兩個分支,master和b1
master 分支下有一個commit:
commit1: add test1.c
b1分支下有兩個commit:
commit2: add test2.c
commit1: add test1.c
如果在master分支下checkout,即:
git checkout master //進入master分支
git checkout -b frommaster //以master為源創建分支frommaster
git log后發現frommaster中有一個提交:
commit1: add test1.c
這說明他是從master分支為源頭創建的
如果在b1分支下checkout,即:
git checkout b1 //進入master分支
git checkout -b fromb1 //以b1為源創建分支fromb1
git log后發現fromb1中已經有兩個提交:
commit2: add test2.c
commit1: add test1.c
這說明他是從b1分支為源頭創建的
遠程分支的創建
從遠程分支檢出的本地分支,稱為跟蹤分支(tracking branch)。跟蹤分支是一種和遠程
分支有直接聯系的本地分支。在跟蹤分支里輸入git push,Git 會自行推斷應該向哪個服
務器的哪個分支推送數據。反過來,在這些分支里運行git pull 會獲取所有遠程索引,并
把它們的數據都合并到本地分支中來.
$ git remote add origin ssh://git@dev.lemote.com/rt4ls.git
$ git push origin master
這兩個操作是等價的,第二個操作的第一行的意思是添加一個標記,讓origin指向ssh://git@dev.lemote.com /rt4ls.git,也就是說你操 作origin的時候,實際上就是在操作ssh://git@dev.lemote.com/rt4ls.git。origin在這里完全可以理解為后者 的別名。
需要說明的是,默認情況下這條語句等價于提交本地的master倉庫到遠程倉庫,并作為遠程的master分支。
我從master分支創建了一個issue5560分支,做了一些修改后,使用git push origin master提交,但是顯示的結果卻是'Everything up-to-date',發生問題的原因是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分支
$ git push origin test:test // 提交本地test分支作為遠程的test分支
如果想刪除遠程的分支呢?類似于上面,如果:左邊的分支為空,那么將刪除:右邊的遠程的分支。
$ git push origin :test // 剛提交到遠程的test將被刪除,但是本地還會保存的,不用擔心
git遠程分支的管理和代碼提交
首先從遠程代碼倉庫中克隆一份代碼, 直接用git clone remote_repository,
假設遠程代碼倉庫有2個分支, master和test分支, 默認是master分支, git clone會克隆遠程的所有分支到本地(可以用git branch -r查看遠程的所有分支). 然后checkout 到默認的一個分支上, 這里默認的分支是master
clone代碼以后, 可以切換到遠程的test分支, 使用
git checkout origin/test, 這時候當前git目錄處于 'detached HEAD' state, 此時需要用git checkout -b new_branch建一個新的分支(從test分支為起點建), 然后就可以在new_branch分支上修改代碼了, 比如我們加一個文件, test,.c, 然后 git add test.c, 然后git commit -a -s 以后就能像test分支提交代碼了
git push origin HEAD:refs/for/test (git push origin HEAD:test)
ps:
在new_branch更新upstream上游的代碼, 可用git pull origin test
git 本地會有一個master, 對應遠程的master, 如果遠程有一個alpha1.0分支, 本地也會有一個和遠程alpha1.0對應的本地分支, 操作和master一樣
關于如何在多個分支直接提交代碼
比如, 有2個分支, master和alpha, 在master上提交代碼以后, 得到一個本次提交的commit id, 如果想要將本次提交再提交一份到alpha, 可以先git checkout alpha,然后使用git cherry-pick commit-id, 再git push origin alpha即可

浙公網安備 33010602011771號