GIT
subscribe
- 菜鸟git教程:https://www.runoob.com/git/git-tutorial.html
- githug游戏【学习git命令】:https://github.com/Gazler/githug
- GIT官方手册:https://git-scm.com/docs
GIT原理解析
-
原理
workspace:工作区 / staging area:暂存区 / 缓存区/local repository:版本库或本地仓库 / remote repository:远程仓库
新增和修改文件都只是在工作目录,是不受GIT管理的,通过git add命令【git add . 所有文件加入暂存区】加入暂存区由GIT管理;
常规正向操作用IDEA提供的按钮就可以【可以通过console看执行的GIT命令】,涉及到逆向操作可以用GIT命令, 逻辑更加明确。
GIT命令行操作
# 单条分支操作!
## 基础操作
git config user.name # 获取当前登录的用户
git config user.email # 获取当前登录用户的邮箱
git config --global user.name 'userName' # 修改登陆账号
git config --global user.email 'email' # 修改登陆邮箱
git config --global user.password 'password' # 修改登陆密码
git init # 初始化仓库【本地初始化的仓库需要在远程建仓库之后才能push过去,所以首先先从GITHUB建仓库再拉到本地】
git clone [url] # 拷贝远程GIT仓库到本地【url 后可加本地仓库名 一般不加跟url仓库名相同】
git add . # 所有文件添加到暂存区【或者git add fileName添加单个文件】
git commit -m 'commit messages' # 提交暂存区改动到版本库【本地】
git reset [--hard,mixed,soft] commitId # 回退到特定【commitId】的提交节点;commitId为HEAD表示当前提交的最新一次提交
git revert commitId # 回退某次commit,并将该操作作为一次新的commit
## 远程操作
git remote -v # 查看远程仓库地址【origin 为远程地址的别名】
git remote rm name # 删除远程仓库
git remote rename old_name new_name # 修改仓库名
git remote add origin git@github.com:tianqixin/runoob-git-test.git
git push -u origin master # 提交到 Github
git fetch origin# 从远程获取代码库到版本库\
git pull <远程主机名> <远程分支名>:<本地分支名> # git pull origin master 从远程获取代码并合并本地的版本
git push [-f,--force] <远程主机名> <本地分支名>:<远程分支名> # git push origin master 将本地的分支版本上传到远程并合并;
# -f/--force 如果本地版本与远程版本有差异,但又要强制推送可以使用
git push origin --delete master # 删除主机的分支可以使用 --delete 参数
## 查看操作
git status [-s]# 用于查看在你上次提交之后是否有对文件进行再次修改【-s参数获取简短输出】
git diff [file] # 比较文件在暂存区和工作区的差异,较少用到
git log [--oneline,--graph,--pretty=oneline] # 查看GIT操作日志,每次commit都会生成一个hash标识;--oneline参数可以显示简短hash同样可以标识该节点
git reflog [--oneline,--graph,--pretty=oneline] # 查看所有分支的所有操作记录信息(包括已经被删除的 commit 记录和 reset 的操作,git log 不包括)
git blame <file> # 查看指定文件的修改记录
## 文件存亡改动
git rm [-f --cached] [file] # 将文件从暂存区和工作区中删除
git mv [-f] [file] [newfile] # 移动或重命名一个文件、目录或软连接
# 多条分支合并操作!
## 合并分支
git branch # 列出所有分支, *标识当前所在分支
git branch (branchname) # 创建分支,从执行该命令的当前分支拉出一条新分支
git branch -d (branchname) # 删除分支
git checkout (branchname) # 切换分支,Git会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录
git checkout -b (branchname) # 创建并切换分支
git merge (branchname) #将分支branchname合并到执行该命令的当前分支,两条支线合并在一个新的提交节点
git rebase (branchname) #将分支branchname合并到执行该命令的当前分支,分支branchname作为当前分支所有提交的父提交节点,一条支线
## git tag标签【为某次commitId打上标识】
git tag -a (标签名) [-m 'tag messages'] commitId # 创建标签
git tag # 查看所有标签
# 其他【临时保存】
git stash [save 'save messages'] # 执行零时存储,只管理GIT可以跟踪到的改动(git add了的[绿色] 和 在已有提交的文件上的改动[蓝色])
git stash list # 查看临时存储了哪些
git stash pop/apply # 恢复
GIT合并原理
merge
一般在开发过程中,具体的步骤如下(下面是一个简单说明):
- 下载项目代码 git clone xxxx
- 新建一个自己的分支(dev) git checkout -b dev
- 然后在自己本地进行开发测试
- 现在需要合并团队的最新代码(master), 把master的代码合并到dev上,如果有冲突就解决冲突 git merge master
- 最后git push dev, 执行MR,即执行合并请求,master分支主人同意后,你的更新代码就上去了。
Merge the incoming changes into the current branch:
rebase
关于git rebase,首先要知道的是,它解决的是与git merge相同的问题。这两个命令的设计目的都是将一个分支的更改合并到另一个分支——它们只是采用了不同的方式。
- 切换到feature分支 git checkout feature
- 合并main分支内容到feature git rebase main
- 什么时候适合用rebase? 不要使用rebase 命令在公共分支
Rebase the current branch on top of the incoming changes:
IDEA GIT操作
- 工作中的操作比较简单,参考红色字体的3步走【如果有冲突有弹窗手动合并冲突】;更多操作和细节参考黄色字体
引用文章
小白专场: Merge the incoming changes into the current branc和Rebase the current branch on top of the …