Git常規(guī)使用備忘錄
git安裝
1.下載后安裝
以Windows系統(tǒng)為例,下載地址:http://git-scm.com/download/win 自動(dòng)下載
2.運(yùn)行Git Bash
git config --global user.name xxx
git config --global user.email [email protected]
3.生成SSH公鑰
ssh-keygen #一路回車就行
4.配置公鑰到gitlab
C:\Users\admin\.ssh路徑下,記事本打開(kāi)id_rsa.pub,拷貝內(nèi)容到gitlab上配置
5.eclipse導(dǎo)入代碼
file -> import -> git -> Projects from Git #不需要填寫賬號(hào)密碼
git配置
配置全局用戶名和郵箱
git config --global user.name "abc"
git config --global user.email?"[email protected]"
配置局部用戶名和郵箱
git config user.name "abc"
git config user.email?"[email protected]"
gitignore
添加.gitignore后,重新進(jìn)行版本控制
git rm -r --cached .git add .git commit -m "update .gitignore"
git提交變更操作
1.拉取最新代碼
git pull --rebase
2.將新增/修改的文件加入暫存區(qū)
方式1:git add 文件名
方式2:git add -p ?#對(duì)比選擇變更的代碼
3.提交本次變更到本地倉(cāng)庫(kù)
git commit -m '注釋'
4.推送本次變更到遠(yuǎn)程倉(cāng)庫(kù)
方式1:git push origin 分支名??
方式2:git push ?#省略[origin 分支名]參數(shù),默認(rèn)會(huì)將當(dāng)前分支提交到遠(yuǎn)程對(duì)應(yīng)分支
git 撤銷操作
未執(zhí)行add操作的撤銷
git checkout xxx
執(zhí)行add操作后,未執(zhí)行commit的撤銷
git reset HEAD xxx
commit后撤銷
git reset --soft HEAD^ // 撤銷commit回到前一個(gè)版本,不撤銷git add,不恢復(fù)變更git reset --soft HEAD~1 // 撤銷commit回到前一個(gè)版本,不撤銷git add,不恢復(fù)變更git reset --soft HEAD~2 // 撤銷commit回到前兩個(gè)版本,不撤銷git add,不恢復(fù)變更git reset --mixed HEAD^ // 撤銷commit回到前一個(gè)版本,并撤銷git add,不恢復(fù)變更git reset --hard HEAD^ // 撤銷commit回到前一個(gè)版本,撤銷git add,恢復(fù)變更
強(qiáng)制回退遠(yuǎn)程版本
git log #查看本地提交記錄,找到要回退的commit_idgit reset --hard commit_id #強(qiáng)制回退到某次提交git push -f origin 分支名 #強(qiáng)制推送到遠(yuǎn)程倉(cāng)庫(kù)
回退某次commit
使用git revert 逆向某次操作,對(duì)某次commit進(jìn)行反向操作:
git revert -n commit_id //逆向某次commit操作,如果有沖突解決沖突,使用git add添加修改,使用git commit提交本次修改git push
替換上一次提交的信息
git commit --amend -m "Fixes bug"
撤銷當(dāng)前分支的變化
在當(dāng)前分支修改并做了幾次提交,發(fā)現(xiàn)不應(yīng)該在當(dāng)前分支做修改,應(yīng)該新建分支修改并提交。
在當(dāng)前已修改過(guò)的分支上新建一個(gè)分支,指向當(dāng)前最新的提交,注意,這時(shí)依然停留在當(dāng)前分支。
git branch?xxx? #xxx代表分支名稱
撤銷當(dāng)前分支到修改提交之前的狀態(tài)
參考上面的撤銷操作
切換到新創(chuàng)建的分支
????git checkout?xxx??#xxx代表分支名稱
從暫存區(qū)撤銷文件
如果不小心把一個(gè)文件添加到暫存區(qū),可以用下面的命令撤銷。
git rm --cached [filename]
上面的命令不影響已經(jīng)提交的內(nèi)容。
撤銷工作區(qū)的文件修改
如果工作區(qū)的某個(gè)文件被改亂了,但還沒(méi)有提交,可以用git checkout命令找回本次修改之前的文件:
git checkout -- [filename]
它的原理是先找暫存區(qū),如果該文件有暫存的版本,則恢復(fù)該版本,否則恢復(fù)上一次提交的版本。
注意,工作區(qū)的文件變化一旦被撤銷,就無(wú)法找回了。
撤銷提交
提交代碼以后,意識(shí)到這個(gè)提交有問(wèn)題,應(yīng)該撤銷掉,執(zhí)行如下命令撤銷:
git revert HEAD
抵消掉上一次提交導(dǎo)致的所有變化,它不會(huì)改變過(guò)去的歷史,恢復(fù)內(nèi)容到上一次提交,但是默認(rèn)會(huì)保留本次的提交記錄,同時(shí)會(huì)產(chǎn)生一次revert commit記錄。
git revert命令還有兩個(gè)參數(shù):
--no-edit:執(zhí)行時(shí)不打開(kāi)默認(rèn)編輯器,直接使用 Git 自動(dòng)生成的提交信息。
--no-commit:只抵消暫存區(qū)和工作區(qū)的文件變化,不產(chǎn)生新的提交。
代碼合并
以下操作將master主干合并到feature分支
1.拉取最新代碼
在當(dāng)前分支拉取最新代碼:git pull --rebase
如果有沖突使用以下步驟解決沖突:
1.1 手動(dòng)解決沖突
1.2 git add filename
1.3 git commit –m 'xxxxx'
1.4 git status //根據(jù)提示繼續(xù)操作
2.切換到master主干
git checkout master
git pull --rebase
3.切回feature分支
git checkout feature-xxx
4.合并master代碼
git merge master
有沖突手動(dòng)解決沖突,解決辦法同上
5.推送到遠(yuǎn)程倉(cāng)庫(kù)
git push
hotfix操作
步驟:
1.拉取develop分支代碼到最新
2.拉取master分支代碼到最新
3.git flow hotfix start 臨時(shí)分支名
4.緊急修改操作
5.git add
6.git commit
7.git flow hotfix finish 臨時(shí)分支名
8.編輯提交的信息
9.分別提交到master和develop
feature分支操作
1. 開(kāi)始一個(gè)新功能:
git flow feature start xxxx
2. 提交這個(gè)功能到遠(yuǎn)程庫(kù):
git flow feature publish xxxx
3. 完成功能,合并到develop:
git flow feature finish xxxx
4. 記得刪除遠(yuǎn)程倉(cāng)庫(kù)里的分支:
git push origin :xxxx
A分支的部分提交應(yīng)用到B分支
git cherry-pick
使用步驟:
1.在A分支使用git log查看需要用到的commit_id,例如abc
2.切換到B分支,使用git cherry-pick abc
cherry-pick也支持將多個(gè)部分提交應(yīng)用到B分支,例如:
git cherry-pick?
但是要保證先后順序,即提交commitHash1必須早于提交commitHash2
也支持區(qū)間,例如:
git cherry-pick?
但是要保證先后順序,即提交commitHash1必須早于提交commitHash2
若過(guò)程中發(fā)生沖突,解決代碼沖突后,第一步將修改的文件重新加入暫存區(qū)(git add .),第二步使用下面的命令,讓Cherry pick過(guò)程繼續(xù)執(zhí)行:
git cherry-pick --continue
當(dāng)然也可以在發(fā)生代碼沖突后,放棄合并,回到操作前的樣子,執(zhí)行命令:
git cherry-pick --abort?
學(xué)之多,而后知之少!朋友們點(diǎn)【在看】是我持續(xù)更新的最大動(dòng)力!
