Git工做經常使用

git

工做經常使用

後面的命令必定要進入項目目錄,即包含 .git 的目錄html

$ git pull <遠程主機名> <遠程分支名>:<本地分支名>  # 合併至當前本地分支,則  :和  :後能夠省略
$ git push origin dev_lyy(本地):dev_lyy(遠程)  # 推送至遠程分支,沒有則新建遠程分支
拉取遠程分支並建立本地分支:git checkout -b 本地分支名x origin/遠程分支名x
顯示分支關聯:git remote show origin
git stash save "save message"  攜帶備註
git stash drop stash@{$num} :丟棄stash@{$num}存儲,從列表中刪除這個存儲
git stash apply stash@{num}:應用好比第二個:git stash apply stash@{1}
git stash pop stash@{$num} ,好比應用並刪除第二個:git stash pop stash@{1}
git reset HEAD~:本地最近一次commit撤回
遠程建立分支後 git fetch => git checkout 分支名 => git push

git reset

命令
分支合併

當master領先本身本地一個分支時,即其餘同事合併了代碼,而我本地也作了修改
git:(dev) git rebase mastergit

git 所作操做:首先,git 會把 dev 分支裏面的每一個 commit 取消掉;
其次,把上面的操做臨時保存成 patch 文件,存在 .git/rebase 目錄下;
而後,把 dev 分支更新到最新的 master 分支;
最後,把上面保存的 patch 文件應用到 dev 分支上;github

提醒算法

在 rebase 的過程當中,也許會出現衝突 conflict。在這種狀況,git 會中止 rebase 並會讓你去解決衝突。在解決完衝突後,用 git add 命令去更新這些內容。
[注意]此步驟你無需執行 git-commit,只要執行 continue
git rebase --continue
這樣 git 會繼續應用餘下的 patch 補丁文件。
固然,在任什麼時候候,咱們均可以用 --abort 參數來終止 rebase 的行動,而且分支會回到 rebase 開始前的狀態。
git rebase —abort

基本知識

Git 使用 SHA-1 算法計算數據的校驗和,經過對文件的內容或目錄的結構計算出一個 SHA-1哈希值,做爲指紋字符串。
該字串由 40個十六進制字符(0-9及 a-f)組成,看起來就像是:24b9da6552252987aa493b52f8696cd6d3b00373
Git 的工做徹底依賴於這類指紋字串,因此你會常常看到這樣的哈希值。實際上,全部保存在 Git數據庫中的東西都是用此哈希值來做索引的,而不是靠文件名。數據庫

Git 管理項目時,文件流轉的三個工做區域:vim

  • Git 的工做目錄
  • 暫存區域
  • 以及本地倉庫

基本的 Git 工做流程以下:app

  1. 在工做目錄中修改某些文件。
  2. 對修改後的文件進行快照,而後保存到暫存區域。
  3. 提交更新,將保存在暫存區域的文件快照永久轉儲到 Git 目錄中。

分爲倆種狀況:fetch

  1. 在工做目錄中初始化新倉庫

&dollar; git init # 初始化;產生一個 .git 文件
&dollar; git remote add origin git地址 # 添加遠程倉庫;origin-遠程倉庫名字可自定義spa

  1. 從現有倉庫克隆

&dollar; git clone git://github.com/schacon/grit.git # 在當前目錄下建立一個名爲「grit」的目錄,其中包含一個 .git 的目錄,用於保存下載下來的全部版本記錄,而後從中取出最新版本的文件拷貝。code

分支相關

$ git branch --set-upstream-to=origin/test test  與遠程分支創建鏈接
$ git branch:不加參數 列出本地
    -r                      # 列出遠程分支
    -a                      # all
    -name                   # 新建分支
    -track                  # 本地/遠程(建立分支而且關聯遠程)
    -v                      # verbose詳細信息
    -d/-D name              # 刪除指定分支
    -m old_name new_name    # 修改分支名
$ git push origin --delete branch_name # 刪除遠程分支
$ git checkout -b branch_name [branch/commit] # 建立並切換分支

其餘操做

$ git remote add name git_address   # 關聯遠程庫
$ git stash # 儲藏當前工做,接着到另外一分支處理問題
$ git stash list # 查看儲藏棧
$ git stash pop # 提取最新工做並從棧刪除
$ git cherry-pick # 能夠理解爲」挑揀」提交,它會獲取某一個分支的單筆提交,
                                    並做爲一個新的提交引入到你當前分支上。
$ git diff 具體修改了那些地方 git diff <local branch> <remote>/<remote branch>對比遠程分支
$ git remote:管理主機名
    不帶參數 -列出全部遠程主機
    -v 參看遠程主機的網址
    -show <主機名>查看詳細信息
忽略文件:建立一個名爲 .gitignore的文件,列出要忽略的文件模式。
如:*.a       #忽略全部 .a 結尾的文件    !lib.a    #但 lib.a 除外

常見誤操做處理方法

撤銷 add:git reset HEAD
合併 commit:
    1. 追加至上一個 commit :git commit --amend;commit 的時間是不會變的;可加上--no-edit
    2. 合併多個:git rebase -i commit(-i 後參數可寫commitHSAH值即你想合併至哪個commit
        或者-i HEAD~n(HEAD將它看作 你的上一次提交 的別名)HEAD~1 上個版本 HEAD~n 上n個版本)
        - 緊接着進入vim界面:pick爲保留,s或者squash爲刪除commit
        - 又另外一個vim界面:commit msg 保留本身須要的或者修改,用#刪除別的commit msg

如何重置某個文件到未修改的狀態?  # git checkout -- <filepath>
如何重置全部文件到未修改的狀態?  # git reset --hard
如何重置到某個 commit?          # git reset <commit SHA>

git reset用於撤銷未被提交到remote的改動,即撤銷local的修改。除了移動當前分支的HEAD,
還能夠更改workspace和index:
git reset --soft HEAD^上一個commit,想撤回倆個用HEAD~2:
    --soft:修改HEAD,不修改index和workspace。
    --mixed:修改HEAD和index,不修改workspace。默認行爲。
    --hard:修改HEAD、index、workspace。把index和workspace的修改所有撤銷。

常見錯誤處理方法

  • git pull or push報錯:fatal: refusing to merge unrelated histories (拒絕合併不相關的歷史)

則在pull命令後緊接着使用--allow-unrelated-history選項來解決問題(該選項能夠合併兩個獨立啓動倉庫的歷史)。

參考資料

圖解git
Git Reset 三種模式
git stash用法

相關文章
相關標籤/搜索