前言:
跟git交互有好多场景,比如第一次推送代码;第一次拉取git上已有的项目;修改代码推送解决冲突;代码提交错误会滚等。接下来就结合场景来学习git命令吧~
目录:
前提:
在下列场景操作时的前提是需要先配置好git全局用户名和邮箱,在git上配置SSH 公钥实现免密登录。具体配置已在文档里面第2,3点阐述:【Git】第一次推送代码到gitLab-CSDN博客
正常场景如下:
场景一:目前在Git上没有项目,第一次推送项目
【Git】第一次推送代码到gitLab-CSDN博客
场景二: Git上有项目,本地无该项目需要克隆项目并自动生成一个本地仓库
步骤1: 想要将项目放在桌面Desktop
cd ~/Desktop
步骤2: 克隆项目到桌面
git clone <此处为项目的SSH地址>
场景三:修改代码并推送
前提:切换到master分支先拉取最新代码
git pull origin master
一般不直接在master分支上改代码,需要额外创建自己的本地分支
步骤1: 克隆项目打开后,会默认在本地master分支上。先查看本地所有分支,其中分支为绿色且跟*代表当前所在分支
git branch
步骤2:需要创建新分支ha并切换
方式一: 创建并切换到新分支 git checkout -b ha
方式二: 先创建新分支 git branch ha
后切换分支 git checkout ha
步骤3:在新分支ha上修改代码进行推送
#将工作区所有改动的文件添加到暂存区
git add .
#将暂存区的文件推送到本地仓库
git commit -m "此处为commment"
#查看工作区文件的状态:
untracked file 即新建文件未跟踪->pycharm显示文件为红色
working tree clean 即文件在暂存区待提交->pycharm显示文件为绿色
Changes not staged for commit即commit过&文件发生修改但未暂存->pycharm显示文件为蓝色
Changes to be committed即文件已暂存,下次提交
git status
#将本地仓库代码推送到远程仓库
git push origin ha
步骤4: 发起merge request而后审批通过
步骤5: 切换本地分支到master
git checkout master
步骤6: 拉取最新代码
git pull origin master
步骤7: 查看远程仓库,应该有master和ha
git branch -r
步骤8: 以行查看最近提交的3条日志,会有commit哈希值和当前head指向和远程仓库的commit
git log -3 --oneline
异常场景如下:
场景一删除(针对工作区的处理):git rm <file>相当于rm和git add
所有场景的前提: hello.py文件commit过到本地仓库即被跟踪的文件
-------------------------------------------------------------
场景1:某个py文件需要下掉不再使用,就需要删除工作区文件并且推送到本地仓库更新版本库
前提:文件未发生修改即 当前工作区的文件内容同当前版本库的内容一致
步骤1: 删除工作区的文件并将该文件添加到暂存区
git rm hello.py
步骤2: 查看文件状态: Changes to be committed: deleted hello.py
git status
步骤3: 推送到本地仓库
git commit -m "此处为comment"
最终: 当前版本库的文件和工作区文件保持一致
-------------------------------------------------------------
场景2: 同场景1
前提:文件发生修改
步骤1: 强制删除工作区的文件并将该文件添加到暂存区
git rm -f hello.py
步骤2: 推送到本地仓库
-------------------------------------------------------------
场景3: 某个py文件不希望被提交,仅在工作区使用.比如日志文件,缓存文件/误提交,想要从版本库删除
解决方案: 使用.gitignore文件添加需要忽略的文件
步骤1: 删除文件
git rm --cached hello.py
步骤2: 查看文件状态
git status
# Changes to be committed: deleted hello.py 需要commit的
# unpacked file: hello.py 被取消退回工作区即未被跟踪
步骤3: 推送到本地仓库会更新版本库
步骤4: 查看工作区文件还在
场景二撤销(针对暂存区的处理):git restore --staged <file>
-------------------取消暂存区的文件----------------
步骤1: 将hello.py, myapp.ini文件添加到暂存区
git add .
步骤2: 想要将hello.py其从暂存区撤回
git restore --staged hello.py
步骤3: 核对该文件状态
git status # Untracked files: hello.py且该文件在pycharm显示红色
步骤4: 所有暂存区的文件都取消
git restore --staged .
-------------------修改暂存区文件内容但未重新暂存,想要撤回工作区的修改---------------
步骤1: 将hello.py添加到暂存区
git add .
步骤2: 对该文件进行修改
步骤3: 查询本地仓库文件状态,简洁展示为: M hello.py 即modified hello.py
git status -s
步骤4: 撤回修改
git restore hello.py
-------------------修改暂存区文件本身(删除文件)但未重新暂存,想要撤回修改---------------
场景三重置(针对本地仓库处理):git reset --options <目标commit 哈希值>
--------------------(谨慎操作)工作区删除,暂存区删除,本地仓库&远程仓库删除------------------
步骤1: 新增hello.py文件并添加到暂存区
git add .
步骤2: 推送到本地仓库
git commit -m "此处为comments"
步骤3: 推送到远程仓库
git push origin master
步骤4: 查看已经提交的commit记录
git log --oneline # 行形式查看未删除的commit,会有commit的哈希值和HEAD指向
# 假设当前已经commit的记录有如下:
234dr (HEAD->master,origin master)hello.py
1e2d3 addFile.py
步骤5: 撤回并删除hello.py文件
git reset --hard 1e2d3
步骤6: 查看HEAD当前指向的commit
git log --oneline
# 当前已经commit的记录如下:
1e2d3 (HEAD->master)
reset操作会导致本地仓库和远程仓库的版本不一致,后续push也会有问题
解决办法:
git reflog # 查看所有分支的操作记录(包括已删除的commit和reset),找到删除的commit哈希值
步骤8: 再次使用reset恢复
git reset --hard <被删除的commit哈希值>
-----------------------2.工作区删除,暂存区删除,本地仓库回滚到指定commit---------------
步骤1: 新增hello.py文件并添加到暂存区
git add .
步骤2: 推送到本地仓库
git commit -m "此处为comments"
步骤3: 查看未被删除的commit记录以及当前HEAD
git log --oneline
# commit列表:
8b9c1c3 (HEAD -> master) hello.py
0d64047 (origin/master) fix
步骤4: 回退到上一个commit即撤回并删除提交到本地仓库的文件hello.py
git reset --hard 0d64047
---------------------3.工作区保留,暂存区保留,本地仓库回滚到指定commit-------------------
步骤1: 新增hello.py文件并添加到暂存区
git add .
步骤2: 推送到本地仓库
git commit -m "此处为comments"
步骤3: 查看未被删除的commit记录以及当前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: 查看文件的状态都为:Changes to be committed
--------------------4.工作区保留,暂存区文件取消,本地仓库回滚-------------------
步骤1: 新增hello.py文件并添加到暂存区
git add .
步骤2: 推送到本地仓库
git commit -m "此处为comments"
步骤3: 查看未被删除的commit记录以及当前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: 查看文件的状态都为:Untracked files
场景三(针对本地仓库恢复):revert
场景四:隐藏(切换分支,隐藏工作区/暂存区的文件):git stash
git有多个提交区,提交之后切换分支不会受到影响
但git只有一个工作区和暂存区,文件在工作区/暂存区切换分支会受到影响
---------------commit之后切换分支--------------------------------
步骤1: 新增hello.py文件并添加到暂存区
git add .
步骤2: 推送到本地仓库
git commit -m "此处为comments"
步骤3: 切换到分支B,看不到hello.py文件
git checkout B
----------------暂时不想commit切换分支也不希望其他分支受到影响--------------
步骤1: 分支A下新增hello.py文件添加到暂存区; world.py文件在工作区
步骤2: 隐藏工作区和暂存区的上述2个文件
git stash save "此处为备注,方便恢复时查找"
步骤3: 切换到分支B,看不到2个文件
步骤4: 切换到分支A,列出隐藏工作现场的文件list
git stash list # 比如 stash@{0}: On A: hello.py&world.py
步骤5: 恢复工作现场并删除隐藏记录
git stash pop stash@{0}
----------------在工作区直接切换分支----------------------
步骤1: 在当前分支A下新增hello.py文件
步骤2: 切换到分支B, 也可以hello.py文件
---------------暂存区直接切换分支------------------------
步骤1: 在当前分支A下新增hello.py文件
步骤2: 将文件添加到暂存区
步骤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文章来源:https://www.toymoban.com/news/detail-761712.html
原因: 文章来源地址https://www.toymoban.com/news/detail-761712.html
(2)reset,revert,checkout的区别
到了这里,关于【Git】3.git常用命令(结合提交/拉取代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!