向下同步
對于遠程倉庫的項目,初始化一個配置文件,配置遠程倉庫及相關信息,賦值遠程倉庫的地址,使用git pull命令即可拉取倉庫代碼。
git pull [remote_addr]
該部分完成向下同步
向上同步
向上同步時會遇到很多的問題,比較順利的是add,commit,push沒有障礙。
git add .
項目文件添加到工作區(qū)
git commit -m "msg"
項目文件添加到暫存區(qū)
git push [remote_addr] [remote_git]:[local_git]
項目文件推送到遠程倉庫
如果遇到障礙一般會遇到兩個層面的障礙:
- 工作區(qū)與暫存區(qū)同步
git一般都有.gitignore
用戶屏蔽非必要文件。工作區(qū)是未和git產(chǎn)生聯(lián)系的目錄,此時還未進入git版本管理,.gitignore
可以選擇那個文件將會被提交到緩沖區(qū)。
.gitignore文件的使用方法 首先,在你的工作區(qū)新建一個名稱為.gitignore的文件。 然后,把要忽略的文件名填進去,Git就會自動忽略這些文件。github上有一些常用的忽略文件
使用gitignore
文件實現(xiàn)工作區(qū)與緩存區(qū)的文件篩選。
在git代碼提交時首先通過git add
將命令添加到緩沖區(qū),這個步驟在有些ide中會自動完成。只有先提交到緩存區(qū)的代碼才會進入git版本記錄。
git工作區(qū)可以理解為開發(fā)者可以看得見的,任意編輯的文件,例如如下文件夾
這里的所有內容都是工作區(qū)的內容,通過使用了git add
命令將文件并使用gitignore
篩選后提交到緩存區(qū)。
需要將那么些文件添加到工作區(qū)可以使用如下命令:
git add * # 將工作區(qū)所有修改添加到暫存區(qū)
git add . # 將工作區(qū)所有修改添加到暫存區(qū)
git add <file-name> # 將指定文件添加到暫存區(qū)
git add *.js # 提交所有 .js 格式文件
git add -f <file-name> # 強制添加 指定文件添加到暫存區(qū)
# 注:<file-name> 指的是文件的名稱
在commit時一般將所有文件提交,所以git add最好時有選擇性的提交。
如下初始化一個git倉庫將所有內容添加到工作區(qū)中git status
查看狀態(tài)
此時代碼已經(jīng)被提交到緩沖區(qū)了。
如果gitignore漏寫導致提交了一些無關代碼該如何撤回或者刪除呢?
git reset
命令撤銷緩存文件
使用git reset命令撤銷.idea文件
git reset命令
git reset <file-name> # 從暫存區(qū)恢復指定到工作區(qū)
git reset . # 從暫存區(qū)恢復所有文件到工作區(qū)
git reset --hard # 把暫存區(qū)的修改退回到工作區(qū)
git reset撤銷就是恢復未使用git add命令之前。
這里會遇到的問題是git commit后git reset會導致本地倉庫和緩存區(qū)不一樣,該問題在會面講解。
git reset是撤回commit的操作也就是撤回本地倉庫的提交,由于緩存區(qū)(git add)和本地倉庫(git commit)是聯(lián)級操作的因此再git rest也能對緩存區(qū)撤回
(簡單來水就是reset是撤回commit的,由于緩存區(qū)和本地倉庫要是聯(lián)級操作,沒有commit直接撤回了add的內容)
git restore
命令是專屬用來撤銷緩存區(qū)代碼的,也就是返回git add之前的狀態(tài)。
該命令又分兩種情況,緩存區(qū)的內容和本地倉庫內容是否一致,如果對文件增加了新的功能話,比本地倉庫內容多,再git restore是就需要考慮是否保留這些內容。
git restore --staged
將本地倉庫的內容撤銷到緩存區(qū)并保留修改git restore
將本地倉庫內容撤銷到緩存區(qū)不保留修改
git restore就是撤回git add提交。
例如,git add添加新文件
git resotre撤回并保留工作區(qū)修改,如果不用–staged那么新追加的代碼就消失了
撤銷了緩存:
????????git reset
和git restore
相似之處在于他們都能撤回緩存區(qū)內容,也就是git add的內容,(reset是由于聯(lián)級操作完成);不同之處在于rest還可以操作本地倉庫即(commit的內容),后者只能操作緩存區(qū)。
看上圖,查看本地倉庫沒有.idea/etcd.iml
文件(沒有commit),使用git reset命令撤回了緩存區(qū)的該文件Untracked fiels
出現(xiàn)了該文件。
如上圖,說明git restore并不能撤回本地倉庫的文件。
如上圖所示,git restore撤回緩存區(qū)內容。
git status
????用于查看工作區(qū)、暫存區(qū)的狀態(tài),會經(jīng)常用到。
git rm --cached <file-name>
命令將本地暫存區(qū)的內容移除,直接刪除文件的git索引,從而刪除文件跟蹤。
git rm
直接將本地倉庫和緩存區(qū)的內容直接刪除了。
- 暫存區(qū)與本地倉庫同步
git commit
將暫存區(qū)的內容提交到本地倉庫,如下未當前緩存區(qū)內容:
git commit
將緩存區(qū)全部內容提交,因此在工作區(qū)提交到緩存區(qū)是需要認證篩選。如下,git commit命令提交代碼
git commit <file-name> ... "相關的記錄信息" # 將緩存區(qū)的指定文件提交到本地倉庫
git commit -m "相關的記錄信息" # 將緩存區(qū)的所有文件提交到本地倉庫
如果緩存區(qū)沒有仔細篩選,導致不必要文件提交到了本地倉庫,git也提供了git revert
撤銷提交。
git revert HEAD
注意revert命令會回溯到前一個commit的版本,如果只有一個版本,那么本地文件也會消失,注意revert時一定要大于一個版本。
git rm
刪除本地倉庫的文件
git提交了多余的內容或者想刪除之前提交的內容,可以使用該命令,對本地倉庫的操作都是聯(lián)級操作,對本地倉庫的操作和緩存區(qū)是同步的。
git rm --cached
注意一定要攜帶-cached
不然會將本地文件一起刪除了,除非完全不需要了。
把.idea文件直接刪除了是無效的,因為此時的刪除只是把工作區(qū)刪除了,緩存區(qū)還在,本地倉庫。這次文件仍然在commit的本地倉庫,在寫新代碼是新代碼不斷從工作區(qū)git add,再git commit,被merge到commit的本地倉庫。如下圖
直接刪除只是將工作區(qū)的文件刪除了,緩存區(qū)和本地倉庫仍然存在,可查看,
git status
查看緩存區(qū)文件狀態(tài)git ls-files -c
查看本地倉庫文件狀態(tài)git ls-files -h獲取更多命令
git直接檢索出了文件目錄下被刪除的文件,也給出了方法(git add重新添加,git rm刪除工作區(qū)文件,git restore)
git ls-files --help
查看有關本地文件的命令
通過git rm
刪除緩存區(qū)內容,git rm命令比較特殊是鏈級刪除,首先本來開發(fā)者就要刪除文件目錄的文件,又要刪除工作區(qū)和暫存區(qū),rm就很好完成該工作,一次性刪除三個位置的文件,分三種情況:
(未commit,已add,只刪除add的部分;以commit,以add,全部刪除;未commit,未add,刪除不了,未與git所有)
不會出現(xiàn)以commit,未add的情況,應為commit和add是關聯(lián)的,一樣的。另外刪除均將文件目錄的文件也刪除了。
由于git在提交時都是從緩存區(qū)全部提交,因此在刪除本地倉庫時緩存區(qū)也同步刪除了,這也是必須的,不然下次再提交如果緩存區(qū)還存在又被提交上去了,一次類推,對本地倉庫的操作都是和緩存區(qū)同步的,這些有git系統(tǒng)自動完成。
git revert
是通過切換不同的提交版本號實現(xiàn)代碼回溯,git rm
是直接刪除文件,git reset
是撤回緩存區(qū)提交的內容,這些命令各有不同但都能實現(xiàn)代碼回溯功能,而且緩存區(qū)隨本地倉庫自動變化。
更多問題請移步論壇Git問答文章來源:http://www.zghlxwxcb.cn/news/detail-634989.html
極客筆記? - 深入淺出打磨IT筆記文章來源地址http://www.zghlxwxcb.cn/news/detail-634989.html
到了這里,關于git倉庫與本地暫存區(qū)的同步問題的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!