前言:
? ? ? ? 跟git交互有好多場景,比如第一次推送代碼;第一次拉取git上已有的項目;修改代碼推送解決沖突;代碼提交錯誤會滾等。接下來就結(jié)合場景來學(xué)習(xí)git命令吧~
目錄:
? ? ? ? 前提:
? ? ? ? ? ? ? ? 在下列場景操作時的前提是需要先配置好git全局用戶名和郵箱,在git上配置SSH 公鑰實現(xiàn)免密登錄。具體配置已在文檔里面第2,3點闡述:【Git】第一次推送代碼到gitLab-CSDN博客
????????????????????????????????????????????????????????????????正常場景如下:
場景一:目前在Git上沒有項目,第一次推送項目
??????【Git】第一次推送代碼到gitLab-CSDN博客
場景二: Git上有項目,本地?zé)o該項目需要克隆項目并自動生成一個本地倉庫
步驟1: 想要將項目放在桌面Desktop
cd ~/Desktop
步驟2: 克隆項目到桌面
git clone <此處為項目的SSH地址>
場景三:修改代碼并推送
前提:切換到master分支先拉取最新代碼
git pull origin master
一般不直接在master分支上改代碼,需要額外創(chuàng)建自己的本地分支
步驟1: 克隆項目打開后,會默認(rèn)在本地master分支上。先查看本地所有分支,其中分支為綠色且跟*代表當(dāng)前所在分支
git branch
步驟2:需要創(chuàng)建新分支ha并切換
方式一: 創(chuàng)建并切換到新分支 git checkout -b ha
方式二: 先創(chuàng)建新分支 git branch ha
后切換分支 git checkout ha
步驟3:在新分支ha上修改代碼進(jìn)行推送
#將工作區(qū)所有改動的文件添加到暫存區(qū)
git add .
#將暫存區(qū)的文件推送到本地倉庫
git commit -m "此處為commment"
#查看工作區(qū)文件的狀態(tài):
untracked file 即新建文件未跟蹤->pycharm顯示文件為紅色?
working tree clean 即文件在暫存區(qū)待提交->pycharm顯示文件為綠色
Changes not staged for commit即commit過&文件發(fā)生修改但未暫存->pycharm顯示文件為藍(lán)色
Changes to be committed即文件已暫存,下次提交
git status
#將本地倉庫代碼推送到遠(yuǎn)程倉庫
git push origin ha
步驟4: 發(fā)起merge request而后審批通過
步驟5: 切換本地分支到master
git checkout master
步驟6: 拉取最新代碼
git pull origin master
步驟7: 查看遠(yuǎn)程倉庫,應(yīng)該有master和ha
git branch -r
步驟8: 以行查看最近提交的3條日志,會有commit哈希值和當(dāng)前head指向和遠(yuǎn)程倉庫的commit
git log -3 --oneline
????????????????????????????????????????????????????????異常場景如下:
場景一刪除(針對工作區(qū)的處理):git rm ?<file>相當(dāng)于rm和git add
所有場景的前提: hello.py文件commit過到本地倉庫即被跟蹤的文件
-------------------------------------------------------------
場景1:某個py文件需要下掉不再使用,就需要刪除工作區(qū)文件并且推送到本地倉庫更新版本庫
前提:文件未發(fā)生修改即 當(dāng)前工作區(qū)的文件內(nèi)容同當(dāng)前版本庫的內(nèi)容一致
步驟1: 刪除工作區(qū)的文件并將該文件添加到暫存區(qū)
git rm hello.py
步驟2: 查看文件狀態(tài): Changes to be committed: deleted hello.py
git status
步驟3: 推送到本地倉庫
git commit -m "此處為comment"
最終: 當(dāng)前版本庫的文件和工作區(qū)文件保持一致
-------------------------------------------------------------
場景2: 同場景1
前提:文件發(fā)生修改
步驟1: 強(qiáng)制刪除工作區(qū)的文件并將該文件添加到暫存區(qū)
git rm -f hello.py
步驟2: 推送到本地倉庫
-------------------------------------------------------------
場景3: 某個py文件不希望被提交,僅在工作區(qū)使用.比如日志文件,緩存文件/誤提交,想要從版本庫刪除
解決方案: 使用.gitignore文件添加需要忽略的文件
步驟1: 刪除文件
git rm --cached hello.py
步驟2: 查看文件狀態(tài)
git status
# Changes to be committed: deleted hello.py 需要commit的
# unpacked file: hello.py 被取消退回工作區(qū)即未被跟蹤
步驟3: 推送到本地倉庫會更新版本庫
步驟4: 查看工作區(qū)文件還在
場景二撤銷(針對暫存區(qū)的處理):git restore ?--staged <file>
-------------------取消暫存區(qū)的文件----------------
步驟1: 將hello.py, myapp.ini文件添加到暫存區(qū)
git add .
步驟2: 想要將hello.py其從暫存區(qū)撤回
git restore --staged hello.py
步驟3: 核對該文件狀態(tài)
git status # Untracked files: hello.py且該文件在pycharm顯示紅色
步驟4: 所有暫存區(qū)的文件都取消
git restore --staged .
-------------------修改暫存區(qū)文件內(nèi)容但未重新暫存,想要撤回工作區(qū)的修改---------------
步驟1: 將hello.py添加到暫存區(qū)
git add .
步驟2: 對該文件進(jìn)行修改
步驟3: 查詢本地倉庫文件狀態(tài),簡潔展示為: M hello.py 即modified hello.py
git status -s
步驟4: 撤回修改
git restore hello.py
-------------------修改暫存區(qū)文件本身(刪除文件)但未重新暫存,想要撤回修改---------------
場景三重置(針對本地倉庫處理):git reset ?--options <目標(biāo)commit 哈希值>
--------------------(謹(jǐn)慎操作)工作區(qū)刪除,暫存區(qū)刪除,本地倉庫&遠(yuǎn)程倉庫刪除------------------
步驟1: 新增hello.py文件并添加到暫存區(qū)
git add .
步驟2: 推送到本地倉庫
git commit -m "此處為comments"
步驟3: 推送到遠(yuǎn)程倉庫
git push origin master
步驟4: 查看已經(jīng)提交的commit記錄
git log --oneline # 行形式查看未刪除的commit,會有commit的哈希值和HEAD指向
# 假設(shè)當(dāng)前已經(jīng)commit的記錄有如下:
234dr (HEAD->master,origin master)hello.py
1e2d3 addFile.py
步驟5: 撤回并刪除hello.py文件
git reset --hard 1e2d3
步驟6: 查看HEAD當(dāng)前指向的commit
git log --oneline
# 當(dāng)前已經(jīng)commit的記錄如下:
1e2d3 (HEAD->master)
reset操作會導(dǎo)致本地倉庫和遠(yuǎn)程倉庫的版本不一致,后續(xù)push也會有問題
解決辦法:
git reflog # 查看所有分支的操作記錄(包括已刪除的commit和reset),找到刪除的commit哈希值
步驟8: 再次使用reset恢復(fù)
git reset --hard <被刪除的commit哈希值>
-----------------------2.工作區(qū)刪除,暫存區(qū)刪除,本地倉庫回滾到指定commit---------------
步驟1: 新增hello.py文件并添加到暫存區(qū)
git add .
步驟2: 推送到本地倉庫
git commit -m "此處為comments"
步驟3: 查看未被刪除的commit記錄以及當(dāng)前HEAD
git log --oneline
# commit列表:
8b9c1c3 (HEAD -> master) hello.py
0d64047 (origin/master) fix
步驟4: 回退到上一個commit即撤回并刪除提交到本地倉庫的文件hello.py
git reset --hard 0d64047
---------------------3.工作區(qū)保留,暫存區(qū)保留,本地倉庫回滾到指定commit-------------------
步驟1: 新增hello.py文件并添加到暫存區(qū)
git add .
步驟2: 推送到本地倉庫
git commit -m "此處為comments"
步驟3: 查看未被刪除的commit記錄以及當(dāng)前HEAD
git log --oneline
# commit列表:
aa9825a (HEAD -> hmx) hello.py
b19a398 bcde.py
31ec1be bce.py
步驟4: 回退到上一個commit
git reset --soft b19a398
步驟5: 再次查看提交日志
# commit列表:
b19a398 (HEAD -> hmx) bcde.py
31ec1be bce.py
步驟6: 查看文件的狀態(tài)都為:Changes to be committed
--------------------4.工作區(qū)保留,暫存區(qū)文件取消,本地倉庫回滾-------------------
步驟1: 新增hello.py文件并添加到暫存區(qū)
git add .
步驟2: 推送到本地倉庫
git commit -m "此處為comments"
步驟3: 查看未被刪除的commit記錄以及當(dāng)前HEAD
git log --oneline
# commit列表:
aa9825a (HEAD -> hmx) hello.py
b19a398 bcde.py
31ec1be bce.py
步驟4: 回退到上一個commit
git reset --mixed b19a398
步驟5: 再次查看提交日志
# commit列表:
b19a398 (HEAD -> hmx) bcde.py
31ec1be bce.py
步驟6: 查看文件的狀態(tài)都為:Untracked files
場景三(針對本地倉庫恢復(fù)):revert
場景四:隱藏(切換分支,隱藏工作區(qū)/暫存區(qū)的文件):git stash?
? ? ? ? ? ? ? ? git有多個提交區(qū),提交之后切換分支不會受到影響
????????????????但git只有一個工作區(qū)和暫存區(qū),文件在工作區(qū)/暫存區(qū)切換分支會受到影響
---------------commit之后切換分支--------------------------------
步驟1: 新增hello.py文件并添加到暫存區(qū)
git add .
步驟2: 推送到本地倉庫
git commit -m "此處為comments"
步驟3: 切換到分支B,看不到hello.py文件
git checkout B
----------------暫時不想commit切換分支也不希望其他分支受到影響--------------
步驟1: 分支A下新增hello.py文件添加到暫存區(qū); world.py文件在工作區(qū)
步驟2: 隱藏工作區(qū)和暫存區(qū)的上述2個文件
git stash save "此處為備注,方便恢復(fù)時查找"
步驟3: 切換到分支B,看不到2個文件
步驟4: 切換到分支A,列出隱藏工作現(xiàn)場的文件list
git stash list # 比如 stash@{0}: On A: hello.py&world.py
步驟5: 恢復(fù)工作現(xiàn)場并刪除隱藏記錄
git stash pop stash@{0}
----------------在工作區(qū)直接切換分支----------------------
步驟1: 在當(dāng)前分支A下新增hello.py文件
步驟2: 切換到分支B, 也可以hello.py文件
---------------暫存區(qū)直接切換分支------------------------
步驟1: 在當(dāng)前分支A下新增hello.py文件
步驟2: 將文件添加到暫存區(qū)
步驟3: 切換到分支B, 也可以hello.py文件
場景五:git checkout
總結(jié)
(1)會碰到的報錯:
? ? ? ? 1. 拉取遠(yuǎn)程倉庫代碼的時候
????????報錯:fatal: Need to specify how to reconcile divergent branches.
? ? ? ? 解決:
? ? ? ? 2. 推送代碼的時候
? ? ? ? 報錯:?! [rejected] ? ? ? ?master -> master (non-fast-forward) error: failed to push some refs to 'gitee.com:xxx'
? ? ? ? 原因排查:
? ? ? ? ? ? ? ? 排查1: 進(jìn)行reset后,git版本不一致導(dǎo)致的
? ? ? ? ? ? ? ? 解決1: 使用 git reset --hard <此處為誤刪除的commit的哈希值>,操作該命令再進(jìn)行push
? ? ? ? 3. 代碼推送到本地倉庫后,切換分支
? ? ? ? 報錯:error: Your local changes to the following files would be overwritten by checkout:
? ? ? ? x x.py
????????????????????????Please commit your changes or stash them before you switch branches.
????????????????????????Aborting文章來源:http://www.zghlxwxcb.cn/news/detail-761712.html
? ? ? ? 原因:?文章來源地址http://www.zghlxwxcb.cn/news/detail-761712.html
(2)reset,revert,checkout的區(qū)別
到了這里,關(guān)于【Git】3.git常用命令(結(jié)合提交/拉取代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!