1.git视频学习笔记:
在Git中,文件的更改可以经历三个主要的阶段:工作区(Working Directory)、暂存区(Staging Area)和代码库(Repository)。
1.工作区(Working Directory):
工作区是你正在开发和修改代码的目录,其中包含未被Git跟踪的文件和已被Git跟踪的文件。
2.暂存区(Staging Area):
暂存区是介于工作区和代码库之间的一个缓冲区,用于暂时存储要提交的文件修改。
将工作区中的文件添加到暂存区:
git add file.txt
3.代码库(Repository):
代码库是Git中存储文件历史和版本信息的地方,包括了所有已提交的更改。它由本地代码库和远程代码库组成。
将暂存区中的文件修改提交到本地代码库:
git commit -m "Commit message"
将本地代码库中的更改推送到远程代码库:
git push origin master
1.配置基础信息
git config --global user.name "chenziyang"
git config --global user.email 3510878@qq.com
2.创建本地git仓库
在想创建仓库的位置,Git Bash中输入:git init
拿别人的现成项目:git clone https://github.com/vgeewg/linux.git
3.跟踪文件或目录
跟踪文件:git add <name>
跟踪当前目录:git add .
删除跟踪文件:git rm <name>
保留在目录中但是不被跟踪:git rm -cache <name>
修改文件后,设为暂存状态:git add <name>
手滑了,取消暂存状态:git reset HEAD <name>
4.提交文件
git commit
提交并附有说明信息:git commit -m '12345678966666'
将没有暂存的文件一并提交:git commit -am '12345678966666'
取消本次提交:git reset head~ --soft(不能撤销第一次提交)
5.查看文件状态
git status
操作示例:
(红色是已修改但未暂存,git add <name>后再git status就是绿色的了,然后git commit后,再git status,此时没有修改也没有提交)
查看细致的修改记录:git diff
查看提交历史:git log(git log --pretty,美化输出格式;git log --graph,图形化方式输出)
6.远程仓库
git remote add origin(一般远程仓库的名字叫origin)
git remote,看一下创建成功与否
git remote rename orgn origin,重命名,改前为后
git remote rm origin,删除远程仓库
git push origin master,推送master分支到远程仓库
以github为例:1.生成Token。2.ssh协议。
7.分支/branch
1.介绍
分支就是储存每个提交对象独一无二哈希值的文件,简单来说就是提交对象的指针,可以在一个提交对象上创建多个分支,初始化本地仓库的时候自动创建master分支。 (经典的git流模型)
feature:开发新特性 develop:收集不同feature分支然后进行测试
release:各种测试没问题,创建此分支待发布 master:发布版
hot fixes:修bug
查看自己所在分支:git log(HEAD->代表自己所在分支),git status
git branch --list(前面带*的就是当前分支)
创建分支:git branch feature1
切换分支:git checkout feature1
创建并切换至新分支:git checkout -b feature2
查看所有分支的提交:git log --all
(git log --all --graph,图形化显示更直观)
2.合并分支
git merge feature1(此时在master分支下)将feature1和master分支进行了合并
再合并分支:git merge feature2
会出现:Merge conflict,说明合并冲突,为了将feature2不冲突的改动合并到master上,需要对冲突处亲自处理。
此时进入冲突文件,======上是当前所在分支的改动,下是新合并分支的改动,保留其一。
冲突解决,进行:git add,git commit
(git log --all --graph,此时feature2也合并到master上了)
执行:git push origin master,将其推送到远程。
除了推送master分支,也可以推送其他分支:git push origin feature1
此时换一个新的仓库,没有这些分支,我们想把刚才提交的分支拉取下来:
git fetch
拉取下来后,分支都有一个origin/,说明不是本地分支,我们想把分支变成本地分支: (准确来说是建立远程分支的跟踪分支,三种写法)
git checkout feature1
git checkout -b feature1 origin/feature1
git checkout --track origin/feature1
8.贮藏/stash
场景:代码写到中途,需要切换分支解决问题(此时目录是脏的),使用git commit并不好,所以使用git stash贮藏自己写了一半的代码(等价于git stash push)。
解决完问题后,切换回刚才git stash的分支,使用:git stash apply恢复存储的内容。
1.git stash apply
git stash可以使用多次,用git stash list可以看存储了几次
{0}是最后一次,{2}是最开始存储的。
想要选择恢复某次存储的stash ,使用:git stash apply stash@{2}
删除存储的stash,使用:git stash drop stash@{0}(数组是顺延的,刚才的{1}变为了{0})
(在脏的目录里,无法apply)
2.git checkout
除了git stash apply,还有恢复stash的操作:
git checkout -- <file_name>(直接将文件恢复为没有修改的状态,慎用,修改全部消失无法找回)
git stash pop:将最后一次存储的stash恢复(副作用:最后一个stash恢复完后会被直接删除)
9.重置/reset
1.reset
git reset head~ --soft(修改的代码还在)
~表示上一次,~2,~3就是倒数第二次、第三次的提交
--soft:只是撤销commit操作,之前git add将文件设为暂存状态的操作还在
git reset head~:不加--soft,暂存状态不存在,再git add就和前者等价了
git reset head~ --hard(修改的代码没了,不太推荐)
彻底回到上一次刚提交完的状态
2.rebase(变基,搬家)
git checkout B
git rebase A
此时做的和merge等价,提交记录会好看一些。
如果其他人使用你提交的代码二次开发,不要rebase,对方在你的基础上开发,rebase会导致改变
交互式操作:rebase -i
git rebase -i head~3(对前三个提交的修改,具体用法用到再查)
--------------------------------------------------------------------------------------------------
30分钟弄懂所有工作Git必备操作 / Git 入门教程_哔哩哔哩_bilibili
感谢UP主的git教学视频!
--------------------------------------------------------------------------------------------------
2.git实战操作
1.clone代码,切换分支
git clone 172.16.2.108/root/code.git
git checkout develop
git reset --hard oa18qw1f8qw1f59q1f98q
2.push改动
cd .git
vim config
或者使用命令
git config user.name "chenziyang"
git config user.email "chenziyang@gbase.cn"
git config user.name
git config user.email
git stn(git status -uno的缩写,自定义的)
git add gtest/src/CMakeLists.txt
git commit -m "add xxx function and gtest xxx,xxx,xxx"
git push origin master:develop
3.切换到其他仓库的分支
cd .git
vim config
[remote "czy"]
url = http://172.16.2.196/chenziyang/czy.git
fetch = +refs/head/*:refs/remotes/czy/*
git fetch czy
git br -a | grep v9.7.6
(假设想要找到的分支为remotes/czy/release/v9.7.6,会搜到)
git co remotes/czy/release/v9.7.6
5.stash贮藏
(当自己代码已经改动,且需要git pull时)
git fetch
git stash save chenziyang
将自己的改动保存下来,且起一个名字(仅起说明作用)
git pull
git stash list
查看保存下来的改动的堆栈
git stash pop stash@{0}
取出想要的改动
6.git merge和git rebase
3.其他问题
1.使用过的命令记录
git br -vv
git pull origin develop
2.git reset --hard commitid后想要撤销:
(前提条件:丢失的分支或commit信息还没有被git gc清除)
1.执行git log -g 或者 git reflog show。
2.找到执行reset --hard之前的commit对应的commitid(可以通过日期和时间来辨别)。
3.通过git branch recover_branch commitid来建立新分支并撤销了回滚(可不操作)。
4.使用命令git reset --hard commitid可强制回滚到之前的版本。
3.修改git commit的信息(未push)
git commit --amend
Git会打开默认的文本编辑器,显示最近一次提交的提交信息。在编辑器中修改提交信息为你想要的新信息,保存并关闭编辑器。