後面的命令必定要進入項目目錄,即包含 .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
當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 工做流程以下:app
分爲倆種狀況:fetch
$ git init # 初始化;產生一個 .git 文件
$ git remote add origin git地址 # 添加遠程倉庫;origin-遠程倉庫名字可自定義spa
$ 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的修改所有撤銷。
則在pull命令後緊接着使用--allow-unrelated-history選項來解決問題(該選項能夠合併兩個獨立啓動倉庫的歷史)。