1、寫在前面
工作目錄:都還沒add的文件
暫存區(qū):把文件add了,就是暫存區(qū)
git init后新建.gitignore文件 //作用:在里面寫入文件路徑,該文件就被忽略,不會被上傳到github中,git status也不會顯示
2、刪除文件
刪除文件
git rm [file] //刪除文件并存入暫存區(qū)
git rm --cached [file] //從遠程庫中移除文件,文件會保留在工作目錄中
git rm -r --cached [file] //從遠程庫中移除文件夾,文件夾會保留在工作目錄中
//然后在.gitignore中查看,沒有路徑的話添加下,然后git add .了該文件也不會上傳到github了
//放棄本地修改
git checkout .
3、分支操作
//分支 (作用:在分支上檢測代碼無誤了再合并到master)
git branch //列出本地分支,加上-r列出遠程分支,-a列出本地和遠程分支
git branch [name] //新建分支,停留在當(dāng)前分支
git branch -d [name] //刪除分支
git checkout -b [name] //新建分支并切換到此分支,去掉-b表示切換到此分支
git push //遠程已有demo分支并且已經(jīng)關(guān)聯(lián)本地分支demo且本地已經(jīng)切換到demo
git push -u origin/demo1 //遠程已有demo1分支但未關(guān)聯(lián)本地分支demo1且本地已經(jīng)切換到demo1
git push origin demo1:demo1 //推送本地的demo1(冒號前面的)分支到遠程origin的demo1(冒號后面的)分支(沒有會自動創(chuàng)建)
git merge [branch] //合并分支到當(dāng)前分支(都是針對本地的分支)
//在一個分支上修改了文件,但是想要推送到另一個分支上
git stash //儲藏未提交已暫存的修改
git stash list //列出儲藏的列表
git stash pop //恢復(fù)上一次的儲藏
git stash apply stash@{2} //應(yīng)用儲藏
4、解決沖突
//查看差異
git diff <file> //比較工作目錄和暫存區(qū)的差異
git diff --cached <filename> 表示查看已經(jīng) add 進暫存區(qū)但是尚未 commit 的內(nèi)容同最新一次 commit 時的內(nèi)容的差異。
//解決沖突
1. git pull
2. 打開文件,會顯示文件沖突的地方
3. 選擇保留哪一個,在保存,推送到遠程庫上
//本地已pull所有遠程庫,但是比如改掉一個文件名引起與遠程沖突
git push -f //強制更新遠程庫
//本地回滾
操作的是你的本地代碼倉庫,可能你add,commit以后發(fā)現(xiàn)代碼問題,準備取消提交,取消的是未提交的add,commit
git reset [--soft | --mixed | --hard
其中HEAD代表版本庫,index代表暫存區(qū)
git reset(等價于git reset --mixed):
場景:不想提交本次修改和本次添加的文件
回退版本庫,暫存區(qū),會保留工作區(qū)代碼。只是將git commit和index 信息回退到了某個版本.
git reset --soft:
場景:不想提交本次修改,但是添加的文件還是要提交的
回退版本庫,保留暫存區(qū)和工作區(qū)源碼。只回退到commit 信息到某個版本.不涉及index的回退,如果還需要提交,直接commit即可.
git reset --hard:
場景:多用于遠程回滾
回退版本庫,暫存區(qū)和工作區(qū)。源碼也會回退到某個版本,commit和index 都回回退到某個版本
//遠程回滾
對于已經(jīng)把代碼push到線上倉庫,你回退本地代碼其實也想同時回退線上代碼,回滾到某個指定的版本,線上,線下代碼保持一致.2種方式
1、git reset --hard:
git reset --hard 回退到某個版本
git push -f 強推到遠程,因為git push已經(jīng)不能推了
2、git revert:
git revert到某個版本
git push 到遠程,2種不同的是git revert 會產(chǎn)生新的commit,你還可以回退
git log //查看提交的歷史版本號,再執(zhí)行g(shù)it revert
git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61
5、遇到問題
1、用git pull來更新代碼的時候,遇到了下面的問題:
error: Your local changes to the following files would be overwritten by merge:
xxx/xxx/xxx.php
Please, commit your changes or stash them before you can merge.
解決方案:
1、暫存后拉遠程
$ git stash //備份當(dāng)前的工作區(qū)的內(nèi)容,從最近的一次提交中讀取相關(guān)內(nèi)容,讓工作區(qū)保證和上次提交的內(nèi)容一致。
$ git pull //拉一下遠程
2、恢復(fù)修改內(nèi)容
$ git stash pop //讀取最近一次保存的內(nèi)容,恢復(fù)工作區(qū)的相關(guān)內(nèi)容。pop會從最近的一個stash中讀取內(nèi)容并恢復(fù)。
// 出現(xiàn)提示
Auto-merging c/environ.c
CONFLICT (content): Merge conflict in c/environ.c
意思就是系統(tǒng)自動合并修改的內(nèi)容,但是其中有沖突,需要解決其中的沖突。
3、解決文件中沖突的的部分
打開沖突的文件,會看到類似如下的內(nèi)容:
其中Updated upstream 和=====之間的內(nèi)容就是pull下來的內(nèi)容,====和stashed changes之間的內(nèi)容就是本地修改的內(nèi)容。
碰到這種情況,git也不知道哪行內(nèi)容是需要的,所以要自行確定需要的內(nèi)容。
2、分支的問題:
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
原因:
是因為本地分支和遠程分支沒有建立聯(lián)系
解決方案:
git branch --set-upstream-to=origin/遠程分支的名字 本地分支的名字
如:git branch --set-upstream-to=origin/demo1 demo1
文獻:
git工作流指南