当前位置:   article > 正文

【Git】3.git常用命令(结合提交/拉取代码)

【Git】3.git常用命令(结合提交/拉取代码)
前言:

        跟git交互有好多场景,比如第一次推送代码;第一次拉取git上已有的项目;修改代码推送解决冲突;代码提交错误会滚等。接下来就结合场景来学习git命令吧~

目录:
        前提:

                在下列场景操作时的前提是需要先配置好git全局用户名和邮箱,在git上配置SSH 公钥实现免密登录。具体配置已在文档里面第2,3点阐述:【Git】第一次推送代码到gitLab-CSDN博客

                                                                正常场景如下:
场景一:目前在Git上没有项目,第一次推送项目

​​​​​​【Git】第一次推送代码到gitLab-CSDN博客

场景二: Git上有项目,本地无该项目需要克隆项目并自动生成一个本地仓库
  1. 步骤1: 想要将项目放在桌面Desktop
  2. cd ~/Desktop
  3. 步骤2: 克隆项目到桌面
  4. git clone <此处为项目的SSH地址>
场景三:修改代码并推送
  1. 前提:切换到master分支先拉取最新代码
  2. git pull origin master
  3. 一般不直接在master分支上改代码,需要额外创建自己的本地分支
  4. 步骤1: 克隆项目打开后,会默认在本地master分支上。先查看本地所有分支,其中分支为绿色且跟*代表当前所在分支
  5. git branch
  6. 步骤2:需要创建新分支ha并切换
  7. 方式一: 创建并切换到新分支 git checkout -b ha
  8. 方式二: 先创建新分支 git branch ha
  9. 后切换分支 git checkout ha
  10. 步骤3:在新分支ha上修改代码进行推送
  11. #将工作区所有改动的文件添加到暂存区
  12. git add .
  13. #将暂存区的文件推送到本地仓库
  14. git commit -m "此处为commment"
  15. #查看工作区文件的状态:
  16. untracked file 即新建文件未跟踪->pycharm显示文件为红色

  17. working tree clean 即文件在暂存区待提交->pycharm显示文件为绿色
  18. Changes not staged for commit即commit过&文件发生修改但未暂存->pycharm显示文件为蓝色
  19. Changes to be committed即文件已暂存,下次提交
  20. git status
  21. #将本地仓库代码推送到远程仓库
  22. git push origin ha
  23. 步骤4: 发起merge request而后审批通过
  24. 步骤5: 切换本地分支到master
  25. git checkout master
  26. 步骤6: 拉取最新代码
  27. git pull origin master
  28. 步骤7: 查看远程仓库,应该有master和ha
  29. git branch -r
  30. 步骤8: 以行查看最近提交的3条日志,会有commit哈希值和当前head指向和远程仓库的commit
  31. git log -3 --oneline
                                                        异常场景如下:
场景一删除(针对工作区的处理):git rm  <file>相当于rm和git add
  1. 所有场景的前提: hello.py文件commit过到本地仓库即被跟踪的文件
  2. -------------------------------------------------------------
  3. 场景1:某个py文件需要下掉不再使用,就需要删除工作区文件并且推送到本地仓库更新版本库
  4. 前提:文件未发生修改即 当前工作区的文件内容同当前版本库的内容一致
  5. 步骤1: 删除工作区的文件并将该文件添加到暂存区
  6. git rm hello.py
  7. 步骤2: 查看文件状态: Changes to be committed: deleted hello.py
  8. git status
  9. 步骤3: 推送到本地仓库
  10. git commit -m "此处为comment"
  11. 最终: 当前版本库的文件和工作区文件保持一致
  12. -------------------------------------------------------------
  13. 场景2: 同场景1
  14. 前提:文件发生修改
  15. 步骤1: 强制删除工作区的文件并将该文件添加到暂存区
  16. git rm -f hello.py
  17. 步骤2: 推送到本地仓库
  18. -------------------------------------------------------------
  19. 场景3: 某个py文件不希望被提交,仅在工作区使用.比如日志文件,缓存文件/误提交,想要从版本库删除
  20. 解决方案: 使用.gitignore文件添加需要忽略的文件
  21. 步骤1: 删除文件
  22. git rm --cached hello.py
  23. 步骤2: 查看文件状态
  24. git status
  25. # Changes to be committed: deleted hello.py 需要commit的
  26. # unpacked file: hello.py 被取消退回工作区即未被跟踪
  27. 步骤3: 推送到本地仓库会更新版本库
  28. 步骤4: 查看工作区文件还在
场景二撤销(针对暂存区的处理):git restore  --staged <file>
  1. -------------------取消暂存区的文件----------------
  2. 步骤1: 将hello.py, myapp.ini文件添加到暂存区
  3. git add .
  4. 步骤2: 想要将hello.py其从暂存区撤回
  5. git restore --staged hello.py
  6. 步骤3: 核对该文件状态
  7. git status # Untracked files: hello.py且该文件在pycharm显示红色
  8. 步骤4: 所有暂存区的文件都取消
  9. git restore --staged .
  10. -------------------修改暂存区文件内容但未重新暂存,想要撤回工作区的修改---------------
  11. 步骤1: 将hello.py添加到暂存区
  12. git add .
  13. 步骤2: 对该文件进行修改
  14. 步骤3: 查询本地仓库文件状态,简洁展示为: M hello.py 即modified hello.py
  15. git status -s
  16. 步骤4: 撤回修改
  17. git restore hello.py
  18. -------------------修改暂存区文件本身(删除文件)但未重新暂存,想要撤回修改---------------
场景三重置(针对本地仓库处理):git reset  --options <目标commit 哈希值>
  1. --------------------(谨慎操作)工作区删除,暂存区删除,本地仓库&远程仓库删除------------------
  2. 步骤1: 新增hello.py文件并添加到暂存区
  3. git add .
  4. 步骤2: 推送到本地仓库
  5. git commit -m "此处为comments"
  6. 步骤3: 推送到远程仓库
  7. git push origin master
  8. 步骤4: 查看已经提交的commit记录
  9. git log --oneline # 行形式查看未删除的commit,会有commit的哈希值和HEAD指向
  10. # 假设当前已经commit的记录有如下:
  11. 234dr (HEAD->master,origin master)hello.py
  12. 1e2d3 addFile.py
  13. 步骤5: 撤回并删除hello.py文件
  14. git reset --hard 1e2d3
  15. 步骤6: 查看HEAD当前指向的commit
  16. git log --oneline
  17. # 当前已经commit的记录如下:
  18. 1e2d3 (HEAD->master)
  19. reset操作会导致本地仓库和远程仓库的版本不一致,后续push也会有问题
  20. 解决办法:
  21. git reflog # 查看所有分支的操作记录(包括已删除的commit和reset),找到删除的commit哈希值
  22. 步骤8: 再次使用reset恢复
  23. git reset --hard <被删除的commit哈希值>
  24. -----------------------2.工作区删除,暂存区删除,本地仓库回滚到指定commit---------------
  25. 步骤1: 新增hello.py文件并添加到暂存区
  26. git add .
  27. 步骤2: 推送到本地仓库
  28. git commit -m "此处为comments"
  29. 步骤3: 查看未被删除的commit记录以及当前HEAD
  30. git log --oneline
  31. # commit列表:
  32. 8b9c1c3 (HEAD -> master) hello.py
  33. 0d64047 (origin/master) fix
  34. 步骤4: 回退到上一个commit即撤回并删除提交到本地仓库的文件hello.py
  35. git reset --hard 0d64047
  36. ---------------------3.工作区保留,暂存区保留,本地仓库回滚到指定commit-------------------
  37. 步骤1: 新增hello.py文件并添加到暂存区
  38. git add .
  39. 步骤2: 推送到本地仓库
  40. git commit -m "此处为comments"
  41. 步骤3: 查看未被删除的commit记录以及当前HEAD
  42. git log --oneline
  43. # commit列表:
  44. aa9825a (HEAD -> hmx) hello.py
  45. b19a398 bcde.py
  46. 31ec1be bce.py
  47. 步骤4: 回退到上一个commit
  48. git reset --soft b19a398
  49. 步骤5: 再次查看提交日志
  50. # commit列表:
  51. b19a398 (HEAD -> hmx) bcde.py
  52. 31ec1be bce.py
  53. 步骤6: 查看文件的状态都为:Changes to be committed
  54. --------------------4.工作区保留,暂存区文件取消,本地仓库回滚-------------------
  55. 步骤1: 新增hello.py文件并添加到暂存区
  56. git add .
  57. 步骤2: 推送到本地仓库
  58. git commit -m "此处为comments"
  59. 步骤3: 查看未被删除的commit记录以及当前HEAD
  60. git log --oneline
  61. # commit列表:
  62. aa9825a (HEAD -> hmx) hello.py
  63. b19a398 bcde.py
  64. 31ec1be bce.py
  65. 步骤4: 回退到上一个commit
  66. git reset --mixed b19a398
  67. 步骤5: 再次查看提交日志
  68. # commit列表:
  69. b19a398 (HEAD -> hmx) bcde.py
  70. 31ec1be bce.py
  71. 步骤6: 查看文件的状态都为:Untracked files
场景三(针对本地仓库恢复):revert

场景四:隐藏(切换分支,隐藏工作区/暂存区的文件):git stash 

                git有多个提交区,提交之后切换分支不会受到影响

                但git只有一个工作区和暂存区,文件在工作区/暂存区切换分支会受到影响

  1. ---------------commit之后切换分支--------------------------------
  2. 步骤1: 新增hello.py文件并添加到暂存区
  3. git add .
  4. 步骤2: 推送到本地仓库
  5. git commit -m "此处为comments"
  6. 步骤3: 切换到分支B,看不到hello.py文件
  7. git checkout B
  8. ----------------暂时不想commit切换分支也不希望其他分支受到影响--------------
  9. 步骤1: 分支A下新增hello.py文件添加到暂存区; world.py文件在工作区
  10. 步骤2: 隐藏工作区和暂存区的上述2个文件
  11. git stash save "此处为备注,方便恢复时查找"
  12. 步骤3: 切换到分支B,看不到2个文件
  13. 步骤4: 切换到分支A,列出隐藏工作现场的文件list
  14. git stash list # 比如 stash@{0}: On A: hello.py&world.py
  15. 步骤5: 恢复工作现场并删除隐藏记录
  16. git stash pop stash@{0}
  17. ----------------在工作区直接切换分支----------------------
  18. 步骤1: 在当前分支A下新增hello.py文件
  19. 步骤2: 切换到分支B, 也可以hello.py文件
  20. ---------------暂存区直接切换分支------------------------
  21. 步骤1: 在当前分支A下新增hello.py文件
  22. 步骤2: 将文件添加到暂存区
  23. 步骤3: 切换到分支B, 也可以hello.py文件
场景五:git checkout
总结
(1)会碰到的报错:
        1. 拉取远程仓库代码的时候

        报错: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: 进行reset后,git版本不一致导致的

                解决1: 使用 git reset --hard <此处为误删除的commit的哈希值>,操作该命令再进行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

        原因: 

(2)reset,revert,checkout的区别
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/992077
推荐阅读
相关标签
  

闽ICP备14008679号