| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> Git命令使用记录 -> 正文阅读 |
|
[开发工具]Git命令使用记录 |
|
工作区(Working Directory) | 暂存区(Stage/Index) | 版本库(commit History) |
---|---|---|
写代码的地方 | 暂时存放 git add 后数据的区域 | 存放 git commit 提交的数据 |
git init (初始化git仓库)
git config --global
user.name “Jelly”
git config --global
user.email “958306134@qq.com”
系统不懂回车符报错的解决:
1. 提交时转换为LF,检出时不转换
git config --global
core.autocrlf input
2. 提交包含混合换行符的文件, 只警告,不报错
git config --global
core.safecrlf warn
3. 针对报错: refusing to merge unrelated histories
git pull origin master --allow-unrelated-history
git clone xxxx // 克隆项目
git config --global --unset user.name // 取消配置的name
git config --global --unset user.email // 取消配置的email
–global: 表示全局下配置,省事,设置后所有的项目都不需要配置;
–local: 当前git仓库下生效,适合本地多个仓库且配置不同时;
git commit -a // vim模式
<=> git commit -am “提交信息“
特点:省略修改代码的 git add 步骤,直接 commit ;
注意:新增的文件不会被commit,仍需要add;
方法1:git restore file1 file2 ...
方法2:git checkout -- file // 丢弃当前file文件所有的修改
方法1:git restore --staged file1 file2 ...
方法2:git reset HEAD^ file1 file2 ... <=> git reset --mixed HEAD^ file1 file2 ...
注意:git reset 默认是 --mixed,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,
工作区文件内容保持不变(也就是保留内容的修改)。
方法1:git reset --soft HEAD^
方法2:git reset --hard HEAD~1
注意:HEAD <=> HEAD~0, HEAD^ <=> HEAD~1, HEAD^^ <=> HEAD~2, ...;
HEAD: 当前版本,HEAD^:上一个版本
注意:这里reset是回退版本的方式撤销commit记录,把当前分支切换到指定版本;
git commit -m “提交信息” // 本地已经commit
方法1:git commit --amend // vim模式,修改提交信息
方法2:如果忘记了某些文件的修改,则需要
git add file1 file2 ...
git commit --amend // vim模式,修改提交信息
优点: 只会有一个提交记录,第二次提交将替换第一次提交的结果;
1. git rebase -i HEAD~3 || git rebase -i HEAD^^^ || git rebase -i fe8ec4d
2. 进入vim模式
pick 新增文件file - message1 // 以此类推,这是倒数第二次提交信息
pick 修改文件file - message2 // 这是倒数第二次提交信息
pick 修改文件file2 - message3 // 这是最新的一次提交信息
3. 修改需要合并的分支:pick 修改为 s || f;
s:squash合并提交信息到上一次的提交信息,比如 message2 的 pick 改为 s,message2将被合并到message1里面;
f:舍弃该次提交信息,比如 message2 的 pick 改为 f,message2 将被删除;
4. 接下来进入确认信息的vim模式,此时可以修改上面整合后的提交信息,然后 :wq(保存退出)或者直接 :q(退出);
5. git push -f // 强制推送,不加 -f 会报错,说本地分支落后什么的,不用管;
注意:要删除的文件是没有修改过的,就是说和当前版本库文件的内容相同;
*如果要删除的文件已经修改过,就是说和当前版本库文件的内容不同:
1. 文件修改过还没 git add 到暂存区;
2. 文件修改过已经 git add 到暂存区;
git rm file 命令删除都会报错,那么就要使用 git rm -f file;
rm --cache 删除暂存区文件,但保留工作区的文件,并且将这次删除放入暂存区;
场景:
rm:当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用;
rm --cache:当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制,
可以使用;
变基:可抽象为如下实际工作场景:张三从B拉了代码进行开发,目前提交了两次,开发到D了;李四也从B拉出来开发了并且开发完毕,他提交到了M,然后合到主干上了。此时张三想拉下最新代码,于是他在feature分支上执行了git rebase master,即把master分支给rebase过来,由于李四更早开发完并合了主干,如此就相当于张三是基于李四的最新提交M进行的开发了。
使用:git rebase master // 当前分支feature,意思是合并master到feature
步骤:
无冲突,直接 git rebase --continue // vim模式
有冲突,
1. 解决冲突文件;
2. git add 冲突文件 或者 git rm 冲突文件
3. git rebase --continue // vim模式
注意:在git rebase --continue之前任何时候都可以中止rebase,使用git rebase --abort。
一般来说,master或者main主分支不提倡使用rebase,会扰乱提交日志;
本地分支更适合用rebase,协同开发时查看提交记录更清晰。
rebase使用场景:
1. 拉公共分支最新代码的时候使用rebase,也就是git pull -r或git pull --rebase。这样的好处很明显,我用rebase拉代码下来,但有个缺点就是rebase以后我就不知道我的当前分支最早是从哪个分支拉出来的了,因为基底变了嘛。
2. 往公共分支上合代码的时候,使用merge。如果使用rebase,那么其他开发人员想看主分支的历史,就不是原来的历史了,历史已经被你篡改了。举个例子解释下,比如张三和李四从共同的节点拉出来开发,张三先开发完提交了两次然后merge上去了,李四后来开发完如果rebase上去(注意李四需要切换到自己本地的主分支,假设先pull了张三的最新改动下来,然后执行<git rebase 李四的开发分支>,然后再git push到远端),则李四的新提交变成了张三的新提交的新基底,本来李四的提交是最新的,结果最新的提交显示反而是张三的,就乱套了。rebase参考来自此博客:https://blog.csdn.net/weixin_42310154/article/details/119004977
注意: git stash apply 默认应用最近一次的stash内容
# 生成SSH,默认路径 C:\Users\用户名\.ssh
# 生成 github 的 SSH
ssh-keygen -t rsa -C “111@qq.com”
# 生成 gitlab 的 SSH,-f ~/.ssh/id_gitlab_rsa 自定义路径和ssh文件名
ssh-keygen -t rsa -f ~/.ssh/id_gitlab_rsa -C “222@qq.com”
# 生成 其他 的SSH
ssh-keygen -t ed25519 -C "xxx@xxx.com" -f ~/.ssh/id_ed25519_xxx
# 创建config文件
touch ~/.ssh/config
# 配置 config 文件
#### gitlab
Host *gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_gitlab_rsa
User Jelly
#### github
Host *github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
User Jelly
#### gitee
Host *gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_ed25519.gitee
User Jelly
#### 公司的gitlab
Host gitlab.xxx.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_ed25519_xxx
User sunzj
# 验证是否配置成功
ssh -T git@github.com
ssh -T git@gitlab.com
ssh -T git@gitlab.xxx.com
新建文件,如: commit_template;
内容如下:
任务ID:
任务描述:
…等等
命令如下:
git config (–global) commit.template commit_template
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/14 14:51:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |