Git的学习使用记录
前言
Git的工作介绍:
工作区:存放本地项目的地方
暂存区:临时存放改动的地方
git仓库:最终版本的放置
Git工作流程:
1.在工作区的目录添加,修改文件
2.将需要进行版本管理的文件放入暂存区
3.将暂存区的文件提交到git仓库
Git的文件管理状态:
1.已修改(modified)
2.已暂存(staged)
3.已提交(committed)
4.未跟踪(untracked)(就是未放入暂存区的文件,放入暂存区的都被跟踪了)
未跟踪的文件标红色,暂存区的文件是绿色
1.在磁盘某处创建文件夹,作为仓库来存储git项目
2.在新建的这个文件夹中右键,git bash here
3.先初始化一下这个仓库文件夹
$ git init
就会生成一个隐藏的.git文件夹
4.设置用户名和用户邮箱
$ git config --global user.name 'xxxx'
$ git config --global user.email 'xxx@xxx'
5.创建文件/文件夹
$ touch/mkdir filename
6.删除本地文件
$ rm filename
7.删除git中暂存的文件
$ git rm filename
8.查看git文件夹已设置信息
$ git config -l
9.查看本地文件状态
$ git status
10.查看提交日志记录
$ git log
其中展示了
(1)第一条commit的括号中显示的是:当前本地所处分支位置,远程操作对应的位置,最近一次commit的来源位置
(2)提交者及时间
(3)对此次提交的说明
11.如果在文件在工作区修改了,已经提交到暂存区,git status之后会提示使用哪个覆盖哪个
$ git add filename 是新文件覆盖旧文件
$ git checkout --filename 是旧文件覆盖新文件
12.执行带有--amend选项的commit提交命令,git就会“更正”最近一次的提交
$ git commit --amend filename
13. 上传当前项目所有内容到本地仓库暂存区
$ git add .
14.提交代码到本地仓库
$ git commit -m "备注"
15.拉取远程仓库代码,不然很有可能把远程仓库代码覆盖掉,特别是团队协作开发的时候要特别注意。第一次可以不用执行git pull
,但团队开发时,推送代码(push)一定要先执行拉取代码(pull)【在拉取代码(pull)时,可能会遇到代码冲突(merge)的问题,遇到冲突先把冲突解决了在重新推送(push),特别是团队协作开发时,特别容易发生代码冲突。】
$ git pull
16.解决代码冲突
$ git merge
17.git 提交文件要提交3次,如图
git add 把文件从工作区提交到stage(暂存区)
git commit 把文件从stage(暂存区)提交到master(当前分支)
git push 把文件从master(当前分支)提交到github
18.关于已commit的文件撤销方法
$ git reset HEAD^ (reset用于本地commit文件的撤销)
$ git revert HEAD (revert用于pushed到远程文件的撤销)
19.关于强制切换当前所在分支位置
$ git branch -f A B (强制从A位置切换到B位置)
实际操作:
1.在桌面新建一个空白文件夹来存放与项目相关的文件,并且右键git bash here
2.初始化一下这个文件夹 git init
3.clone一下github上存放此项目的地址 保持同步 git clone xxxxxx
4.输入指令“ll”可以查看当前文件夹下的文件目录
5.进入目录
(1)创建新分支(此时用git branch是没有返回值的)
--创建master分支:git checkout -b master
--在这个分支下创建一个readme文件
--提交任意一个文件(一般是readme):git commit readme.md (如果不commit,是无法新建分支的,此时再用git branch就可以看到分支了,此时可以新建分支)
--把想要同步到github的分支通过指令:git push -u origin 分支名 同步到远程的github上
(2)提交
--在本地修改好文件之后,把文件(夹)push到github:先git add 再 git commit -m “备注” 最后 git push
(3)在本地的其他分支
在本地的其它分支似乎无法直接提交到远程(可能是我操作有误),需要将本地新的分支下写好的内容覆盖本地原分支的内容,完成本地内容的更新之后,再从本地的原分支提交给远程对应分支
(感觉自己的这步操作绕弯子了,日后弄清楚了再改)
关于覆盖的方式,有merge和rebase两种,目前我个人倾向于使用rebase
merge构造网状交叉历史提交记录,rebase提供线性历史提交记录
如图(参考了git的学习网站 https://learngitbranching.js.org/?locale=zh_CN)