IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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命令使用记录

博客持续更新中,如果有哪里不对或者需要完善的请指出,共勉!

vim: 后面提到的进入vim模式的命令都会用vim代替;

vim编辑模式都是如此:按 i 进入编辑模式 — 修改信息 — ESC(退出编辑模式) — :(输入) — wq(保存并退出); 或者 q(不保存强制退出)


工作区(Working Directory)暂存区(Stage/Index)版本库(commit History)
写代码的地方暂时存放 git add 后数据的区域存放 git commit 提交的数据
初始化仓库
  1. git init (初始化git仓库)

  2. git config --global user.name “Jelly”

  3. git config --global user.email “958306134@qq.com”

  4. 系统不懂回车符报错的解决:
    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

  5. git clone xxxx // 克隆项目

git config --global --unset user.name // 取消配置的name

git config --global --unset user.email // 取消配置的email

–global: 表示全局下配置,省事,设置后所有的项目都不需要配置;

–local: 当前git仓库下生效,适合本地多个仓库且配置不同时;

提交代码基本步骤
  1. git status (-s) // 查看当前分支状态, -s 精简打印的信息
  2. git add file1 file2 // . -> 全部提交, file1 -> 具体提交某个文件
  3. git commit -m “信息” // 把更改提交到暂存区
  4. git pull // 更新本地代码
  5. git push // 推送到远程仓库
  6. git log (–oneline) // 查看提交记录,–oneline 精简查看提交记录

git commit -a // vim模式

<=> git commit -am “提交信息“

特点:省略修改代码的 git add 步骤,直接 commit ;

注意:新增的文件不会被commit,仍需要add;

撤销某个文件的修改
方法1:git restore file1 file2 ...
方法2:git checkout -- file    // 丢弃当前file文件所有的修改
撤销add —— git add 是添加对文件的追踪
方法1:git restore --staged file1 file2 ...
方法2:git reset HEAD^ file1 file2 ... <=> git reset --mixed HEAD^ file1 file2 ...
注意:git reset 默认是 --mixed,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,
工作区文件内容保持不变(也就是保留内容的修改)。
撤销commit – git commit 是将修改添加到暂存区(staged)
方法1:git reset --soft HEAD^
方法2:git reset --hard HEAD~1
注意:HEAD <=> HEAD~0, HEAD^ <=> HEAD~1, HEAD^^ <=> HEAD~2, ...;
HEAD: 当前版本,HEAD^:上一个版本
注意:这里reset是回退版本的方式撤销commit记录,把当前分支切换到指定版本;
修改提交记录 —— amend 会进入编辑模式
git commit -m “提交信息” // 本地已经commit
方法1:git commit --amend // vim模式,修改提交信息
方法2:如果忘记了某些文件的修改,则需要
	git add file1 file2 ...
	git commit --amend // vim模式,修改提交信息
优点: 只会有一个提交记录,第二次提交将替换第一次提交的结果;
合并提交记录 —— rebase -i
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 会报错,说本地分支落后什么的,不用管;
删除文件 —— git rm 是删除工作区文件,并且将这次删除放入暂存区
注意:要删除的文件是没有修改过的,就是说和当前版本库文件的内容相同;
*如果要删除的文件已经修改过,就是说和当前版本库文件的内容不同:
	1. 文件修改过还没 git add 到暂存区;
	2. 文件修改过已经 git add 到暂存区;
git rm file 命令删除都会报错,那么就要使用 git rm -f file;

rm --cache 删除暂存区文件,但保留工作区的文件,并且将这次删除放入暂存区;

场景:
rm:当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用;
rm --cache:当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制, 
可以使用;

变基rebase —— 当执行rebase操作时,git会从两个分支的共同祖先开始提取待变基分支上的修改,然后将待变基分支指向基分支的最新提交,最后将刚才提取的修改应用到基分支的最新提交的后面

变基:可抽象为如下实际工作场景:张三从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图解

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

分支branch的使用
  • git branch // 查看当前分支
  • git branch test // 创建分支 test
  • git checkout test // 切换到test分支
  • git branch -d test // 删除本地分支
  • git push origin -d // test 删除远程分支
  • git checkout -b test // 在本地创建test分支,同时切到test
  • git branch -a // 查看所有的分支
  • git branch -vv // 查看所有分支的关联情况
  • git push --set-upstream origin test // 新建的分支, 推送需要关联远程仓库对应分支(不存在会自动创建)
  • git checkout -b 20191031 origin 20191031 // 拉取远程分支

标签tag的使用
  1. git tag v2.0.0
  2. git tag -a v2.0.0 -m “附加信息” 9fbc3d0 // 给指定的commit打tag
  3. git show v2.0.0 // 查看tag详细
  4. git tag -d v2.0.0 //删除本地tag
  5. git push origin v2.0.0 // 将tag提交到远程仓库
  6. git push origin --tags // 一次性推送全部尚未推送到远程的本地标签
  7. git push origin --delete tag v2.0.0 // 删除远程仓库的tag
  8. git push origin :refs/tags/v2.0.0 // 删除远程仓库的tag

其他命令
  1. gitk // 快速打开GitUI面板
  2. git branch --set-upstream-to=origin/master master // 关联远程仓库
  3. git stash (保存当前分支的修改, 场景: 1.当前分支有修改,同时需切换分支去开发; 2.当前分支合并分支前使用,避免合并的时候冲突(但合并过来后,恢复缓存的修改后可能会有冲突);)
  4. git stash pop (恢复缓存的修改并且移除缓存记录, 等价于git stash apply stash@{0} + git stash drop stash@{0}) 注意: git stash apply 默认应用最近一次的stash内容
  5. git push -u (-f) origin master // 提交到远程仓库,这个命令中的 -f 是强制推送,因为远程仓库只有初始化的文件,所以新创建的仓库强制推送上去就行了,不加-f 会报当前分支没有远程分支;
  6. 本地项目关联远程仓库,XXX就是你github或者码云等远程仓库的地址;
    1. git init
    2. git remote add origin XXX

本地如何同时使用SSH关联 github 和 gitlab
# 生成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
git配置 commit 模板

新建文件,如: commit_template;
内容如下:

任务ID:
任务描述:
…等等
命令如下:
git config (–global) commit.template commit_template

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:56:36  更:2022-05-09 12:57:27 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码