学术报告:Git的经验和心得
1. 学习Git的目的
- 场景:在写代码时候,如果出现BUG,暂时解决不了,想回退到某个特定的时间段所写的代码在次重新进行书写,这时候就需要GIt,能够很好的帮助你。
- 介绍:Git是一个非常流行的分布式版本控制系统,能够在你独立开发项目或者团队开发项目的时候很好的帮助你管理代码或者其他东西。
- 目的:学习一种新技术,方便自己更好的,更快的开发一款好的软件。能够帮你在代码库的组织和整合上有作为,同时分支能够帮助开发团队更好地协同工作,无需互相干扰,在此基础上能够更加方便的使用Git工具可帮助我管理不同的代码库并且对代码进行补丁管理和检查等操作打下基础。
2. Git的学习步骤
2.1下载安装
- 安装Git工具,可在官方网站上下载并按照指南进行安装;也可以参考视频博主进行安装或者搜寻相关的博客进行安装。其实就是下载,选择安装路径,然后配置环境变量
- 涉及连接远程仓库配置和idea配置GIt的,可以看这个人的博客,我觉得写的挺不错的,链接: GitHub新手用法详解【适合新手入门-建议收藏!!!】和 IDEA连接Github该怎么连,如何小组合作Github项目,手把手教会你 这两个应该比较全面了
#检验是否安装成功(在dos窗口)
$ git --version
2.2 基本的知识
- 一些常用的Linux命令(我比较用的多的)
# 显示当前所在的目录路径
$ pwd
# 显示当前目录下的所有文件
$ ls
# 进入到当前文件下
$ cd fileName
# 回退到上级目录
$ cd ..
# 清空所有页面所有记录
$ clear
# 新建一个文件
$ touch fileName_type
# 删除一个文件
$ rm fileName_type
# 新建一个目录,就是新建一个文件夹
$ mkdir fileName
# 查阅文档和用法
$ help sth
# 退出dos窗口
$ exit
-
了解一下Git基本理论
-
文件的状态:(能清楚的知道文件所处在的状态,方便之后的操作)
Untracked:代表工作区有,但是本地仓库无。(就是自己在开发软件上新建的文件)
Unmodified: 代表工作区和本地一样。
modified:代表工作区修改了。以下两个的操作为:要么提交到暂存区,丢弃;要么就是提交到本地仓库。(主要是看你修改的代码是否需要)
staged:暂存区,为后续的提交本地仓库做准备,采用commit进行提交;要么就是丢弃,就是git reset HEAD filename,回归到修改前。
- Git配置(方便确认是谁,十分的重要):
#查看系统config
$ git config --system --list
#查看当前用户配置
$ git config --global --list
# 配置git的姓名
$ git config --global user.name "userName"
# 配置git的邮箱
$ git config --global user.email "userEmail"
- 一个人进行远程仓库的基本步骤
#在当前目录新建一个GIt代码库(在本地计算机建立仓库)
$ git init
#克隆一个项目和它的整个代码历史(从gitee或者GitHub来创建本地仓库)
$ git clone url/ssh
# 本地仓库的指定文件提交
$ git add file_name
# 本地仓库的全部文件提交
$ git add .
# 查看文件的状态
$ git status [filename]
#查看所有文件的状态
$ git status
#本地仓库提交(默认出现VIm界面,按i/a,进入编辑状态,先按esc,输入:wq即可保存并退出))
$ git commit
# 本地仓库的commit(建议用这种)
$ git commit -m "message"
# 提交记录的日志
$ git log
# 回滚到之前的样子
$ git reset --hard [commit_ID]
# 添加远程仓库1
$ git remote add origin url
# 添加远程仓库2(这种好点)
$ git remote set-url origin ssh
# 查看远程仓库
$ git remote -v
# 推送到远程仓库1
$ git push
# 上面的这步骤可能会被提示添加上流仓库
$ git remote add upstream url
# 推送到远程仓库2(一般这种多点)
$ git push -u origin your_branch
# 将本地仓库恢复到初始的的位置
$ git check out head file
# 强制重置本地分支到远程分支
$ git reset --hard origin/分支名
# 例如:git reset --hard origin/master 或 git reset --hard origin/main
- 关于分支的相关知识(在减少冲突的方面上很有必要,每个分支相当于不同的版本,可以来回进行操作)
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 重命名分支
$ git branch -m oldName newName
# 切换分支
$ git checkout [your_branch]
# 新建一个分支,并切换到该分支(一个命名包含了上面的两个命令)
$ git checkout -b [your_branch]
# 合并指定分支到当前分支(当前分支稳定之后才能进行合并分支)
$ git merge [branch]
# 删除分支(可能会提示你,确定要删除,使用 -D才行)
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
- 在团队合作中容易出现conflict,用branch解决
//下面是团队合作的一般的步骤操作
git clone URL
git remote -v
git remote add upstream url
git checkout -b <your_branch> #一定要换分支,在分支上书写代码
git add .
git commit -m "message"
git push -u origin your_branch
//在到远程仓库自己的分支就是pr(拉取),如果显示绿色,怎么可以合并。如果conflict则
git fetch origin(upstream)#更新最新的代码到本地仓库
git merge origin/master(upstream/main)#将最新的代码和本地代码进行合并,手动处理冲突
## git pull是拉取下来直接合并,很有可能起冲突##
git push #将处理好的代码进行再次推送
补充:
# 修改(Amend)上一个提交,对上一次的提交进行覆盖,且不会额外的产生新的提交记录。
$ git commit --amend -m "message"
# 将分支变基(Rebase)到master
$ git checkout branchName
$ git rabse master
# 使用快进(fast-forward)将分支合并到master
$ git checkout branchName
$ git merge --ff-only master
# 中止第一次提交的合并(当遇到冲突时)
$ git merge --abort
# 将未提交的修改暂存(Stash)
$ git stash save "message"
# 将上一个暂存的修改恢复并从暂存列表中删除
$ git stash pop
# 签出指定提交
$ git checkout <提交的hash>
# 撤销旧提交
$ git revert <旧提交的hash>
# 利用reflog查看本地仓库中的所有操作
$ git reflog
-
场景一、针对开始单个Task所采用的方法,我一般采用的下面的方案(也是大哥推荐我使用的)
-
1. 先切换到本地master分支,拉取代码,确保你开始任务前代码是最新的
git checkout master
git pull origin master
-
2. 新建一个工作分支,这样分支也是最新的
git checkout -b Task
-
3. 然后接着,查看修改情况,add,commit,push,发pr合并
git status
git add file_name / git add .
git commit -m "message"
git push origin Task
接着在github上Pull request如果第一次合并不成功的话,先继续修改,然后请继续下面的操作
-
4.修改提交。建议走方案二
git status
git add file_name / git add .
git commit -m "message"
- 这一步不会影响你的本地分支,只是从远程仓库获取最新的更改。
git fetch origin
- 直接push(方案一)
git push origin Task
- 通过 rebase 命令,将 master 分支的最新更改应用到你的当前工作分支(方案二)。
git rebase origin/master
这个命令会将你当前分支的提交“重放”在 master 分支的最新提交之后,确保提交历史是线性的。(好处)
- 这一步不会影响你的本地分支,只是从远程仓库获取最新的更改。
- 5. 解决合并冲突(可选):
- 如果在
rebase
过程中出现冲突,Git 会停止并提示你解决冲突。你可以根据需要修改冲突文件,修改后运行以下命令:
git add 冲突文件
- 然后继续
rebase
过程
git rebase --continue
- 如果你想放弃
rebase
并恢复到之前的状态,可以使用:
git rebase --abort
- 如果在
- 6. 推送更新后的分支(方案二的push):
- 由于
rebase
重新整理了提交历史,你需要使用–force-with-lease 选项推送你的分支,因为提交记录发生了变化。
git push --force-with-lease origin 你的分支名称
- 由于
-
-
场景二、在你开发Task1时,因为某些原因没法暂时没法完成。这时候你之前写的代码检测存在bug,你必须要开始解决这个Task2。
- 工作流程:
- 保存当前分支的内容
git stash save "message"
- 切换到含有bug任务的分支、拉取最新代码
git checkout your_branch
git pull origin master
然后,你修改完之后进行相应的add、commit、push等操作后,返回你之前写的一半的任务
- 切换到原来的Task分支,拉取最新代码
git checkout your_branch
git pull origin master
- 查看已保存的 stash
git stash list
- 恢复修改当前的/恢复修改某个特定的
git stash apply / git stash apply stash@{0}
- 删除已恢复的 stash
git stash drop stash@{0}
- 保存当前分支的内容
- 工作流程:
3. 学习Git的难点及遇到的问题
- 学习Git的难点在于掌握Git的概念、命令以及Git工具使用等,需要花费一定的时间学习。而且也可能因为相对陌生的概念,遇到问题的解决过程,可能会涉及到Git底层原理的情况,需要较强的学习意愿,同时也需要较强的耐心和自学能力。孰能生巧
- 遇到的问题:git commit命令不成功
问题的原因:
1.it commit -m ” message”,message提交信息为空。
2.如果在合并分支时出现冲突,将无法提交代码。需要解决之后才能提交
3.未添加文件,就是暂存区里没有文件,需要git add文件之后才能提交
4.文件被修改了,没有被提交
5.分支不对,无法进行提交
- 遇到的问题:git push 不成功
问题的原因:
1.首先可能是没有权限,无法访问远程仓库;或者是没有添加远程仓库。
2.冲突问题,先解决冲突才能重新提交。因为在团队合作时,其他队员更新的远程仓库的代码,需要先拉取下来,合并之后再push。
3.可能是网络不好,没提交成功
这两个问题经常出现在我们的工作中,这是我们必须要了解的。
最后我想说的是,这两个问题中出现了冲突,因为每个人完成时间不同,在上传过程中出现冲突。所以我们每个人都会独立创建一个属于自己的分支,等自己的代码稳定后,可以同步远程仓库,在提交自己的代码。