GIT:是一個天天都會用到的工具。天天都用不等於用得好,這篇文章將會記錄更新git中遇到的問題git
背景:項目環境複雜,項目分爲新區和舊區,舊區代碼爲基礎代碼,新區代碼是從舊區拆分出來的,通常狀況下,若是新舊區都上線,須要從舊區拉取分支markdown
問題:同一個問題在新舊區都有,迭代須要同時發佈,本應該舊區拉分支,可是開發時重新區拉了分支,如今想合到舊區,新區代碼沒法向前合併到舊區,怎麼辦。。。app
小白思惟:舊區拉一個分支,從新修改相關問題。浪費時間,迭代發版之際從新修改代碼,容易出錯,不科學ide
GIT高級思惟:工具
a.git log branch1 ^branch2:查看branch1中有的commit,而branch2中沒有的commit
ui
b.git log branch1..branch2:查看branch2的log比branch1的log多提交了哪些內容
lua
c.git log branch1..branch2:查看branch2的log比branch1的log區別,並不知道哪一個分支提交的多
url
d.git log --left-right branch1..branch2:查看branch2的log比branch1的log區別,能夠查看提交的分支, <表示branch1,>表示branch2
spa
a.git diff commit1 commit2 commitId能夠取前六位
b.git diff --name-only commit1 commit2
3d
c.差別文件打包:git diff --name-only commit1 commit2 | xargs tar -zcvf 文件名稱.tar.gz
d.git diff commit1 commit2 -w 忽略全部空格
e.簡略寫法
HEAD:當前提交;
HEAD^:上一次提交
HEAD~X;
HEAD~0:當前提交;
HEAD~1:上一次提交
。。。依次類推
查看某次commit的具體提交內容
a.git show commitID
b.git show HEAD:查看HEAD標籤當前指向提交的完整信息
c.git show branchxx:查看branchxx分支最新一次提交的完整信息
d.git show branchxx^;git show branchxx~1:查看branchxx分支最新一次以前一次提交的完整信息
。。。依次類推
對於多分支的代碼庫,將代碼從一個分支轉移到另外一個分支,正常咱們用git merge 可是若是咱們只須要部分代碼變更(某幾個提交),就可使用cherry pick
a.git cherry-pick commitID:某個commitID轉移到當前分支,通常放在最後
b.git cherry-pick branch:某個分支的最新提交轉移到當前分支
c.git cherry-pink commitID1 commitID2一次轉移多個提交
d.git cherry-pick A..B 轉移A到B的全部提交,A的提交必須早於B,而且不包含提交A
e.git cherry-pick A^..B 轉移A到B的全部提交,A的提交必須早於B,而且包含提交A
a. git cherry-pink --continue
解決代碼衝突以後,第一步 git add .,而後使用git cherry-pink --continue,讓cherry-pick繼續執行
b.git cherry-pick --abort:放棄合併,回到操做前的樣子
c.git cherry-pick --quit:退出cherry-pick,不回到操做前的樣子
使用場景:在A分支上寫代碼,此時B分支須要緊急修復bug,此時A分支的代碼不提交,就能夠放在暫存區,git stash存起來,而後去B分支進行bug修復,修復工做完成後,回到A分支拿出暫存的文件內容
git stash以前的status
git stash
git stash以後的status
git stash list
恢復暫存的狀態的命令:
a.git stash pop:不會在git stash list保存記錄
git stash pop以前
git stash pop以後
b.git stash apply:會在git stash list保存記錄
每次合併分支發版以前給即將合併的主分支打tag標籤,給當前版本作個標記,以便回退到此版本。若是使用commit-sha1,你們記不住sha1碼,因此用tag標籤記錄