赞
踩
跟git交互有好多场景,比如第一次推送代码;第一次拉取git上已有的项目;修改代码推送解决冲突;代码提交错误会滚等。接下来就结合场景来学习git命令吧~
在下列场景操作时的前提是需要先配置好git全局用户名和邮箱,在git上配置SSH 公钥实现免密登录。具体配置已在文档里面第2,3点阐述:【Git】第一次推送代码到gitLab-CSDN博客
【Git】第一次推送代码到gitLab-CSDN博客
- 步骤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
- 所有场景的前提: 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: 查看工作区文件还在
-
- -------------------取消暂存区的文件----------------
- 步骤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
-
- -------------------修改暂存区文件本身(删除文件)但未重新暂存,想要撤回修改---------------
-
- --------------------(谨慎操作)工作区删除,暂存区删除,本地仓库&远程仓库删除------------------
- 步骤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
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文件
-
报错:fatal: Need to specify how to reconcile divergent branches.
解决:
报错: ! [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
报错: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
原因:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。