Git經常使用指令記錄

簡介

git有漂亮的WEB界面css

很是自由的本地commit(不用擔憂是否影響到他/她人) 操做稍微複雜了一點點。html

git屬於分佈式的版本管理工具。每一個人都有所有的提交歷史。git

經過git push 和 git pull 將更新提交到遠端github

git的使用參考

參考: http://www.bootcss.com/p/git-guide/編輯器

入門分佈式

  1. 安裝客戶端(https://git-scm.com/downloads)
  2. 建立一個倉庫 其中一種方法 建立一個目錄 your-project 在目錄下面執行命令 git init 第二種方法 git clone <倉庫的地址>
  3. 添加與提交 git add * git commit -m 「add some file"

1.4 推送改動 添加倉庫的地址(若是不是clone出來的倉庫,須要初始化下origin的地址)ide

git remote add origin <git-repo-server-addr>

推送svn

git push origin master

git的默認分支就是master(經過git branch能夠查看當前的分支) 這句命令的意思就是將master分支裏的內容,推送到名叫origin的遠程倉庫去。工具

工做流

  • working dir(工做目錄):持有實際文件
  • index(暫存區):臨時保存你的改動
  • HEAD:指向最後提交的結果

如何回退

從工做目錄到暫存區fetch

git add <file-name>

從暫存區到HEAD

git commit
git reset HEAD~   # 執行後,就行沒有commit同樣
git reset --hard HEAD~  # 這個有點暴力,執行後,就像你全部的修改也都沒了

改動沒有提交

git checkout <your-filename>

改動已經提交

git reset --hard HEAD~ # 放棄一次提交
git reset --hard HEAD~2  # 放棄兩次提交
git reset --hard <sha-版本號> # 回滾到某個版本號

還有一種辦法處理以及提交的問題(最新研究出來的)

# 查看歷史,找到須要回滾到的版本
git log

# 回到那個版本, 注意後面那個 "."
git checkout <sha> .

# 而後commit就行了
git commit -am "...."

衝突的處理

使用文本編輯器,打開衝突的文件

處理完衝突後,

git add <衝突的文件>  # 跟svn比,沒有svn resolved這一步
git commit -m 「提交記錄」

若是執行了git merge,可是想放棄一次代碼合併

git merge --abort

分支管理

建立,並卻換到新的分支(如dev分支)

git checkout -b dev

卻換回來(默認的分支是master)

git checkout master

合併分支的內容

git merge dev

若是有衝突,參考上面的,人肉處理就行了 刪除遠程分支(刪除test)

git push origin :test

git的經常使用配置

git config --global color.ui true

設置忽略文件列表

ref: http://git-qa.gz.netease.com/gzleiyingfeng/git_course/tree/master

直接把須要忽略的文件列表放到.gitignore文件裏就能夠了

$ cat .gitignore
# frameworks/base    # 此爲註釋,被git忽略
*.a                  # 忽略全部.a結尾的文件
!lib.a               # 但lib.a除外,!
build/               # 忽略build目錄下的全部文件
doc/*.txt            # 忽略doc目錄下的全部.txt結尾文件,但不包含doc/notes/*.txt
/TODO                # 僅忽略項目根目錄下的TODO文件,但不包含subdir/TODO

提交pull request

如何爲一個commit提交pr

參考

  1. fork 一份代碼(假定爲 myfork ),myfork的主幹始終和oschina-url的主幹保持一致。

    1. 如何保持和主幹的代碼一致

      1. 設置upstream remote:git remote add upstream oschina-url
      2. 直接pull upstream remote: git pull upstream master
    2. 查看變動後更新

      git fetch upstream master
      git diff master FETCH_HEAD
      git merge FETCH_HEAD
  2. 新建 feature 分支,有任何修改都在該分支上進行開發。

  3. 從 upstream 的主幹新建一個要 pr 的分支(假定爲 pr-example),提取 feature 分支中要 pr 的修改。

    查看 feature 分支要pr的提交: git log (假定hash爲 e1ad54d)

    # 建立pr-example分支
    git checkout -b pr-example upstream/master
    # 分支提取提交
    git cherry-pick e1ad54d
    # 提交到遠程倉庫
    git push -u origin pr-example
  4. 經過 pr-example 分支向 upstream 的主幹發起 pull request。

  5. pr被接受以後,刪除該分支

    git branch -d pr-example
    # 刪除遠端分支
    git push origin :pr-example

cherry-pick 使用:

  • 提取指定分支的 HEAD 提交:git cherry-pick totoro
  • 提取指定分支的 HEAD 往前 n 個提交:git cherry-pick totoro~n
  • 提取多個連續提交:git cherry-pick A..B,如 git cherry-pick totoro~4 totoro 會提取 totoro * 分支上 HEAD 前4個和 HEAD 自己共5個 commit,git cherry-pick e296145..a649050 會提取 e296145 和 a649050 之間(含)的全部 commit。

更多用法請參考git help cherry-pick

(注: pr是pull request的簡稱)

其餘

ref: http://www.yangzhiping.com/tech/github.html

修行之道 關注大師的言行, 跟隨大師的舉動, 和大師一併修行, 領會大師的意境, 成爲真正的大師。

其餘優秀的資料

相關文章
相關標籤/搜索