標籤:blog http 使用 strong 檔案 for ar 2014
今天第一次向nodeclub提交了兩個修改,兩個修改都是涉及部分瀏覽器的相容性的. Manager很快合并了我的修改,好開森。晚上又重新回爐了一下git的日常操作,將git部分操作整理了一下寫於此博. 為開源而開心~ ~
git 初學指南版本回退
- 曆史查看
git log or git log --pretty=oneline:列出所有的提交記錄
commit 333123123erer123sd123123213123213123
commit後面的為提交的ID
- 退回相應版本
退回版本有兩種方法
第一種:
git reset --hard HEAD^: 上一個版本
git reset --hard HEAD^^: 上上個版本
git reset --hard HEAD~66: 上66個版本
第二種
git reset --hard commitID 退回相應版本的ID
commitID可以不全,git會自動補全
- 回到退回前的版本
後悔退到這個版本了怎麼辦,這時git log只能查看此版本之前的資訊
還好還有git reflog可以查看曆史操作
本地倉庫管理
- 本地添加修改並提交
本地倉庫分3個地區
工作區 項目工程目錄
暫存區 版本庫的stage
分支 master和其他分支
當我們對工作區的項目進行修改後可以使用git status查看修改檔案資訊
將其放到暫存區stage使用git add somefile.cxs
然後提交到本地分支git commit -m "some message"
( 如果在工作去做了改動卻沒有add而是直接commit,會出現提示資訊要求你add,但你也可以在提交時使用git commit -am "some message" 加個a參數 )
This time 修改已經提交到本地分支了
- 本地暫存區管理
a. 添加
git add 命令可以向暫存區添加檔案 如果在一個add之後又修改了檔案,那就必須再add一次
( git 管理的是修改,add的時候放入暫存區的是當前檔案的修改並不是檔案本身 )
b. 查看
git diff HEAD -- somefile.cxs 命令可以查看當前工作區檔案和版本庫中的差異
c. 撤銷
# On branch master
# Your branch is ahead of ‘origin/master‘ by 2 commits.
# (use "git push" to publish your local commits)
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README.md
# # Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: README.md
#
當我們向本地倉庫提交過修改,向暫存區添加過修改或者在工作區修改過檔案後用git status查看狀態時都會有相應如上的提示。 上面的提示告訴我們3點
- 本地分支中有兩個commit,待提交當遠程倉庫中,使用
git push提交。
- 版本庫的暫存區中有一個修改,待提交到本地倉庫,使用
git reset HEAD fileName從暫存區中刪除修改
- 工作區中有一個檔案被修改,用
git add fileName提交到暫存區,用git checkout -- fileName 將工作區中的檔案恢複到上一次提交的狀態。上一次提交的狀態分兩種。第一種:如果已經使用了add提交到暫存區,那就將恢複到最後一次提交到暫存區的狀態。第二種如果暫存區為空白那就會恢複到最後一次commit時的狀態。
遠程倉庫
- 添加遠程倉庫
使用git remote add <originName> <gitRepo> 添加遠程倉庫地址
使用git push -u <originName> master 將本地的最新修改提交到遠程倉庫
- 複製遠程倉庫到本地
使用git clone <gitRepo>將遠程倉庫複製到本地
( gitRepo的地址分兩種一種使用ssh另一種使用https )
git 協作和開發基本的分支操作
- 建立分支
git branch dev 建立一個dev分支
git checkout dev 切換到dev分支
兩步並一步 git checkout -b dev
- 分支切換
git branch 查看當前有哪些分支
找到分支然後git checkout <branchName>進行切換
( 有一點要注意的是當你在分支或主支上有修改沒提交時是不允許進行分支切換的 )
如果不允許切換有兩種解決方案
- 第一種解決方案:乖乖地將暫存區的修改刪掉,把工作區修改的檔案恢複到修改前的水平,這裡涉及的兩個命令已經講過了,
git reset HEAD fileName 和 git checkout -- fileName
- 第二種解決方案:使用
git stash命令將現在的工作存起來,相當於保護現場.
下次回到分支時使用git stash list查看存起來的工作,使用git stash pop將工作恢複,也可以使用git stash apply <stashName like [email protected]{0}>回複某一個工作
- 合并分支
在dev和其他分支上的操作和在master上操作是一樣的,操作完後使用git checkout master切換到master主分支上然後合并分支,合并分支有兩種方式
- 第一種方式:使用
git merge <branchName> 如果使用這種方式合并在刪除分支時會丟失分支資訊
- 第二種方式:( 推薦使用 )
git merge --no-ff -m "some message" <branchName>
兩種方式的區別如
方式一:
方式二:
- 合并時的衝突解決
當我們合并分支是如果代碼有衝突會出現這樣的提示
Auto-merging somefile.cxs
CONFLICT (content): Merge conflict in somefile.cxs
Automatic merge failed; fix conflicts and then commit the result
這表明somefile.cxs檔案裡有代碼衝突.衝突的地方標識如下.
<<<<<<< HEAD
Creating in Master.
=======
Creating in dev.
>>>>>>> dev
將代碼修改後再 git add somefile.cxs
然後 git commit -m "fixed somefile.cxs conflict" 提交
- 查看項目分支情況和刪除分支
git log --graph --pretty=oneline --abbrev-commit命令可以以圖形的方式展現項目的分支情況.
git branch -d <branchName>可以將分支刪除.有時分支還沒有合并到master上那就需要git branch -D <branchName>命令將分支刪除
- 多人協作模式
多人協作步驟如下
-
使用git push origin <branchName> 推送自己的修改,如果出錯說明遠程分支的代碼和你有衝突.
-
如果代碼有衝突那就使用git pull origin 抓取遠程倉庫合并,如果想保險一點可以先git fetch origin master:tmp 然後 git diff master tmp 查看一下遠程倉庫和自己的代碼有什麼差異,然後git merge tmp 解決代碼衝突後提交到本地倉庫,然後push到遠程倉庫
-
如果你開發的是遠程倉庫的某個分支那你就需要在本地建立一個對應的分支,命令如下git checkout -b dev origin/dev
( 複製下來的時候你只能看到master分支,其他分支是看不到的 )
然後使用git branch --set-upstream <branchName> origin/<branchName>將本地分支與遠程倉庫分支進行關聯.然後進行上面提到的兩步操作