git使用操作
概念
下面提到的三个区
工作区 就是磁盘的文件夹 也就是.git所在的目录
暂存区 中间区域,临时存放提交修改的内容
本地仓库 就是git init创建的仓库 包含了元数据和代码信息
HEAD表示当前的仓库版本 HEAD~表示当前仓库版本的上一个版本
ssh远程配置
- 生成公钥密钥 略
默认生成位置是~/.ssh 看下之前是否有生成过其他密钥,如果有,不要按回车,自定义一个文件名,不然会被覆盖掉,不可逆,而且要进入到~/.ssh 才开始创建密钥,因为生成的文件是保存在当前cd的路径的 - 在.ssh文件夹中创建config文件 作用是访问不同域名指定用不同的密钥,PreferredAuthentications参数是优先使用公钥密钥登陆访问
Host githubabc.com
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile /root/.ssh/git_test
当用了这个配置后需要对github的仓库地址做些变动,
假设原始的github地址为 git@github.com:young-shi/test-exercise.git
那么我们在git clone 地址的时候 要改成git clone git@githubabc.com:young-shi/test-exercise.git
- github setting里添加公钥信息
- git clone [远程仓库] 进行仓库拉取
安装和初始化配置
git init 新建代码仓库 创建.git文件
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
如果你只想为当前仓库设置用户名和邮箱,可以省略 --global 选项。这会将配置写入当前仓库的 .git/config 文件中。
新建仓库
git clone remoteaddr
工作区域和文件状态
添加和提交
git add abc.txt 或者 git add .
git commit -m "备注内容"
git commit -a -m "备注内容"
-a 参数代表 --all,它用于将所有已被跟踪(已被 Git 索引过)的文件中被修改的部分自动暂存到提交中。这意味着你不需要手动使用 git add 命令来将已修改的文件添加到暂存区。如果你有新建的文件,-a 参数不会将这些文件包括在提交中;你仍需要手动 git add 这些新文件以纳入版本控制。
合并
merge
develop分支合并到master分支操作
- git add .
- git commit -m "备注2"
- git checkout[switch] master 切换到master分支
- git merge develop 合并dev分支到master
比如当前分支是master 如果要将dev合并到master中,则在当前的master分支 git merge dev即可
如果当前分支是develop,就要先切换到master 再git merge develop
合并完后 分支依旧存在不会删除,如果不需要 要手动删除 git branch -d git branch -D -d和-D都是删除 -d是必须merge后才能删除 -D是没有merge也能强制删除
合并冲突
合并冲突会在两个分支修改了同一个文件的同一行代码出现冲突
可以用git diff 查看具体冲突的两个文件内容(merge冲突后会将冲突内容显示在当前分支的该文件上),然后手动编辑这个冲突文件的内容后才能再次提交
rebase
rebase 也是合并 但是会合并成一条直线,将提交的指针移动到变基分支上
main和dev分支
Git switch main
Git rebase dev
是将main分支变基到dev分支上,他们会首先找到两个分支的共同交集点,然后将main节点上共同交集点后的更新内容转移到dev节点上,形成一条直线
历史记录
git log 查看节点
git log --state 查看节点和commit id
git diff commit id 查看这次提交修改了什么内容
git log —graph —oneline —decorated —all 在终端图形展示分支的状态 可能没有纯粹图形化展示的那么清晰
查看比较相关
git ls-files 查看暂存区文件
git diff
默认比较的是工作区和暂存区的差异内容
git diff HEAD 比较工作区和仓库的差异
git diff --cached
git diff [commie id1, commie id2] 比较2个 比如git diff HEAD HEAD~
回退版本
git reset 参数 [commit id] 回退到指定节点
reset 的三个参数 --soft(回退版本但保留工作和暂存区的修改) --hard(回退版本也不保留工作和暂存区的修改)) 和--mixed (回退版本,保留工作,不保留暂存区的修改) 同时mixed也是默认参数
--soft 和--mixed场景是 提交了多个版本 想合并成一个版本,可以回退,但是soft回退后可以直接git commit
但是mixed需要重新git add . 因为mixed会删除暂存区的提交
--hard就是纯粹的版本回退
git checkout [commit id] 回退到指定节点
暂存区影响:git reset --hard 会更新暂存区,而 git checkout 通常不会(除非在特定情况下)。
分支影响:git reset --hard 会使当前分支指向新的提交,而 git checkout 在回退到特定提交时可能会使你脱离当前分支并进入“分离 HEAD”状态。
切换分支
建议使用git switch
git branch
查看看当前的分支
git branch -r
查看远程分支:
git branch -a
查看所有本地和远程分支:
git branch -d git branch -D -d和-D
都是删除分支 -d是必须merge后才能删除 -D是没有merge也能强制删除
展示分支
git log —graph —oneline —decorated —all 在终端图形展示分支的状态 可能没有纯粹图形化展示的那么清晰
git checkout
1.git checkout
表示核查工作区相对于版本库修改过的文件
2. git checkout + 分支名
表示切换分支
3. git checkout -b 分支名
表示以当前分支的当前状态创建新分支并切换到新分支 -b 表示创建新分支
4. git checkout -b 分支名 commitID
表示以当前分支的commitID提交节点创建新的分支并切换到新分支。此时工作区的内容和切换分之前commitID提交节点的内容一样
5. git checkout commitID
是以指定的提交节点创建了一个临时性分支,此临时性分支可用于做实验性修改
6.git checkout filename
当没有提交版本号时将工作区的指定文件的内容恢复到暂存区的状态
git checkout .
将工作区的所有文件的内容恢复到暂存区的状态
7. git checkout
当有提交版本号时,表示将工作区和暂存区都恢复到版本库指定提交版本的指定文件的状态,此时HEAD指针不变,此时的状态相当于把工作区的内容修改到指定版本的文件内容后,再把修改的内容添加到暂存区。因此git checkout
因为git checkout 根据不同参数同时具有切换版本和回退作用,为了避免歧义,新版本增加了专门切换分支的命令
git switch
git switch
git switch -c创建一个新分支 并立即切换到新创建的分支
git switch - 快速切换回前一个分支,无需记住分支名称:
git switch <commit_hash> 将工作目录切换到指定提交 <commit_hash> 的状态
删除文件
git rm filename 会同时删除工作区文件和暂存区的文件,但是不会删除仓库文件,所以需要git commit 同步仓库
没有git rm命令前是用linux rm -f file 然后再用git add . 更新暂存区,再用git commit同步仓库
git rm --cached 删除暂存区和仓库的文件,但是工作区的文件没有影响
忽略文件
创建.gitignore文件
添加忽略的后缀,也可以忽略文件夹
比如:*.log和temp/
匹配规则
推送远程
git push
我们可以用git branch -all 查看当前的所有分支,
比如
main
* mydev 当前分支
remotes/testdev/dev 推送过的远程分支
remotes/prodev/mydev
如果我们想删除远程分支 可以git push origin --delete testdev/dev
删除这个远程分支
本文作者:死了也要PY
本文链接:https://www.cnblogs.com/Young-shi/p/18313593
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2021-07-20 JAVA基础知识-02
2021-07-20 JAVA前奏小知识-01