git操作

git命令速查

Git常用命令表

常用操作與撤銷

git add xx.txt 把xx.txt添加到緩存區(qū)
git reset HEAD xx.txt把xx.txt從緩存區(qū)取消


git commit xx.txt -m '提交xx.txt' 提交本地倉庫
git reset –hard HEAD 撤銷之前的commit(HEAD是指向最新的提交,上一次提交是HEAD,上上次是HEAD^,也可以寫成HEAD~2 ,依次類推)
HEAD^ 可以替換成指定提交的hash值
如果不小心reset了,git reflog 查看記錄,并能過reset --hard找回之前reset的記錄
--hard請慎用,請慎用,請慎用


git commit --amend修改最后一次修改
比如:

git add a.txt
git commit -m"add a.txt,b.txt"

發(fā)現(xiàn)b.txt沒有提交,此時再執(zhí)行

git add b.txt
git commit --amend

此時會跳出編輯提交框,可以修改注釋及編輯修改的文件,esc鍵后WQ!保存退出后,則b.txt會附加到最后一次提交里面。
如果git commit --amend --no-edit則不會出現(xiàn)編輯確認(rèn)框直接修改。


git revert和git reset的區(qū)別

git revert是用新的一個commit來回滾之前的commit,HEAD是要繼續(xù)前進
git reset是直接刪除指定的HEAD,其是相當(dāng)于在不斷后退
git reset--hard** 會直接刪除掉目標(biāo)HEAD之后所有的操作,且工作去和暫存區(qū)都會修改
git reset --soft ,該命令會將工作去的文件回退到目標(biāo)版本,但是不會改變暫存區(qū)的狀態(tài)。



rebase與merge 區(qū)別

將dev分支合并到master分支
git merge dev直接合并,提交會按照時間排序
rebase操作dev上的操作會在master的后面

git checkout dev
git rebase master # 將dev上的操作在master分支上做一次衍合處理
# git提示出現(xiàn)了代碼沖突,此處為之前埋下的沖突點,處理完畢后
git add readme # 添加沖突處理后的文件
git rebase --continue # 加上--continue參數(shù)讓rebase繼續(xù)處理

tag標(biāo)簽與branch分支的區(qū)別

標(biāo)簽和分支都是引用,它們存儲的內(nèi)容也是類似的,都是指向一個commit對象的sha-1值。
tag的位置是固定的,在給指定提交打好標(biāo)簽以后,它就固定于此位置。分支的位置會不斷變動的,隨著分支的向前推移或者向后回滾,都在不斷變化。

git fetch與git pull的區(qū)別

git fetch 相當(dāng)于是從遠(yuǎn)程獲取最新到本地,不會自動merge。

git fetch orgin master //將遠(yuǎn)程倉庫的master分支下載到本地當(dāng)前branch中
git log -p master  ..origin/master //比較本地的master分支和origin/master分支的差別
git merge origin/master //進行合并

git fetch origin master:tmp //從遠(yuǎn)程倉庫master分支獲取最新,在本地建立tmp分支
git diff tmp //將當(dāng)前分支和tmp進行對比
git merge tmp //合并tmp分支到當(dāng)前分支

git pull:相當(dāng)于是從遠(yuǎn)程獲取最新版本并merge到本地
git pull origin mastergit pull 相當(dāng)于從遠(yuǎn)程獲取最新版本并merge到本地
在實際使用中,git fetch更安全

commit點合并成一個commit點

  • rebase實現(xiàn)
    git rebase -i commitId
    參考自這里這里
    如果這個過程中有操作錯誤,可以使用 git rebase --abort來撤銷修改,回到?jīng)]有開始操作合并之前的狀態(tài)。

  • git merge --squash 選項

git merge --squash another
git commit -m "message here"

--squash含義和原理如下:
--squash選項的含義是:本地文件內(nèi)容與不使用該選項的合并結(jié)果相同,但是不提交、不移動HEAD,因此需要一條額外的commit命令。其效果相當(dāng)于將another分支上的多個commit合并成一個,放在當(dāng)前分支上,原來的commit歷史則沒有拿過來。
判斷是否使用--squash選項最根本的標(biāo)準(zhǔn)是,待合并分支上的歷史是否有意義。
如果在開發(fā)分支上提交非常隨意,甚至寫成微博體,那么一定要使用--squash選項。版本歷史記錄的應(yīng)該是代碼的發(fā)展,而不是開發(fā)者在編碼時的活動。
只有在開發(fā)分支上每個commit都有其獨自存在的意義,并且能夠編譯通過的情況下(能夠通過測試就更完美了),才應(yīng)該選擇缺省的合并方式來保留commit歷史。

忽略本地文件的修改

忽略file.txtgit update-index --assume-unchanged file.txt
恢復(fù)file.txt的跟蹤git update-index --assume-unchanged file.txt
查看當(dāng)前被忽略的、已經(jīng)納入版本庫管理的文件:git ls-files -v | grep -e "^[hsmrck]"

AndroidStuido或idea上的圖形化操作請移步idea提交git常見操作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Git有很多優(yōu)勢,其中之一就是遠(yuǎn)程操作非常簡便。本文詳細(xì)介紹5個Git命令,它們的概念和用法,理解了這些內(nèi)容,你就...
    bondPang閱讀 1,410評論 0 6
  • git 指南 git操作 本地操作 git add <file>暫存工作區(qū)的修改到暫存區(qū) git commit將暫...
    IrisZL閱讀 662評論 0 0
  • 今天天氣很冷。冷的讓我想起了你。大概總是閑下來的時候,我就會想起你。還記得你說,總是會想起我在一個冬天與你見...
    魚的思念閱讀 226評論 0 1
  • 最近在讀斯科特·派克的《少有人有的路》。書中的第一部分談到了自律。 我常常感覺“不太能夠管的住自己”是大多數(shù)人(包...
    蛄鶇閱讀 1,253評論 0 3

友情鏈接更多精彩內(nèi)容