文章目录

  • 使用git对代码进行版本控制
    • git的三个工作区和工作流程
    • git的本地基本操作
  • 如何安装git
  • 如何配置git
  • 使用git对本地代码进行版本控制
  • 使用git同时管理本地和远程代码
  • git高频常用功能
    • git commit
    • git diff
    • git reset
    • submodule
    • git branch 用法汇总
    • 取消跟踪
  • 常见报错
    • fatal: The remote end hung up unexpectedly
    • warning: remote HEAD refers to nonexistent ref, unable to checkout.
    • 升级Git
    • ssh-keygen
    • git remote add
  • 同时推送到Github和Gitee
  • git修改.gitignore后使其配置生效方法
  • 更改 nano为vim
  • 合并连续非连续commit
  • Error: Command failed with exit 128: git
  • 参考文档

使用git对代码进行版本控制

git的三个工作区和工作流程

working directory是「工作目录」,是我们能够看到的文件,当我们在working directory中执行"git add/rm <file>...",就会把working directory中的修改(modified)添加到「暂存区」stage area(或者叫index area)中去。

stage area中存在修改时,我们使用git commit相关命令之后,就会把stage area中的修改保存到「提交历史」commit history中,也就是版本库(Repository)中。

git的本地基本操作

"git add ." 会监控「工作目录」working directory的状态树,使用它会把工作时的所有变化提交到暂存区stage area,包括文件内容修改(modified)以及新文件(new),注意不包括被删除的文件。

"git commit" 主要是将「暂存区」stage area里的改动提交到本地的「提交历史」commit history也就是版本库(Repository)中。

每次使用"git commit" 命令都会在本地版本库生成一个40位的哈希值,这个哈希值也叫commit-idcommit-id在版本回退的时候是非常有用的,可以在未来的任何时候通过与git reset命令回到这里。

总结将文件向git版本库里添加的时候分两步执行,第一步用git add把文件修改添加到暂存区,第二步用git commit把暂存区的所有内容提交到当前分支的版本库。

创建git版本库时git自动创建了唯一一个mian分支,所以git commit就是往mian分支上提交更改。
可以简单理解为,需要提交的文件修改通通放到暂存区,然后一次性提交暂存区的所有修改保存到版本库(Repository)。

github、gitlab、gitea、gitee都是基于web的git代码管理工具。

如何安装git

sudo apt-get install git

如何配置git

设置用户名和邮箱地址,每次提交都会使用该信息
git config --global user.name "用户名"
git config --global user.email "邮箱"
使用该信息来提交每次操作 --global
使用不同的用户名或邮箱地址则去掉 --global

使用git对本地代码进行版本控制

  1. 创建工作目录
mkdir git_test
  1. 创建README.md文件
cd git_test
echo "# github-test1" >> README.md 
  1. 通过命令git init把目录变成git可以管理的仓库
cd git_test
git init
  1. 将全部更改添加到暂存区
cd git_test
git add .
  1. 把暂存区的所有内容提交到历史记录中
cd git_test
git commit -m "first commit"
-m 是提交的备注信息
  1. 查看当前状态
cd git_test
git status
  1. 查看提交记录
cd git_test
git log 显示提交的记录
git log --pretty=oneline 简略显示提交的记录
git reflog  显示所有提交记录(包括回退及回退前记录)

使用git同时管理本地和远程代码

git的远程基本操作
将本地版本库的分支推送到web远程git repositories(仓库)上对应的分支可以使用git push,形式为 git push 远程仓库名 本地分支名:远程分支名 ,例如 git push origin main:mainorigin是远程仓库名,第一个main是本地分支名,第二个main是远程分支名,将本地的main分支推送到远程仓库origin上的对应main分支, 如果当前分支只有一个远端分支,那么主机名都可以省略形如git push。要注意git给远程库起的默认名称是origin,如果有多个远程库,需要用不同的名称来标识不同的远程库。

  1. 在github上创建一个仓库,实现仓库远程同步和协作。

在github上创建一个仓库,然后在本地克隆

git clone https://github.com/xiaoqiuslamshizhanjiaocheng/git_study.git

下载后使用vscode打开,更新README.md文件,如下图所示
接下来我们把修改保存到版本库然后推送到远端github


接下来就是是把代码推送到远端github了,.git是隐藏文件夹,我们需要在vscode里面修改config文件。

搜索 files.exclude,就可以看到当前隐藏的文件夹了,可以在这里添加新的需要隐藏的文件或者删除不需要隐藏的文件。


生成a personal access然后编辑config文件如下图所示

点击Settings

点击左侧的Developer settings

点击Personal access tokens


点击Generate new token

设置token信息

全部勾选

点击Generate token生成令牌

得到生成的令牌

应用令牌

config[core]repositoryformatversion = 0filemode = truebare = falselogallrefupdates = true
[remote "github"]url = https://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@github.com/xiaoqiuslam/zero_start_learning_slam.gitfetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]remote = githubmerge = refs/heads/main


最后执行git push就可以将代码推送到远端

git pull github main --allow-unrelated-histories
--allow-unrelated-history 该选项可以合并两个独立分支的历史
git push github main
警告:push.default没有设置,它的隐含值在Git2.0的时候已经从‘matching’变成了‘simple’。去掉该提示消息并且保持旧版本的git push行为,
使用:git config --global push.default matching去掉该提示消息并采用新版本的git push行为,使用:git config --global push.default simple当push.default设置为‘matching’时,git将会把本地分支代码push到远程同名分支上去。从Git 2.0开始,push.default变成了更为保守的‘simple’行为模式,它只将当前分支推送到对应的“git pull”用于更新当前分支的远程分支。通过‘git help config’并搜索‘push.default’获取更多信息。(‘simple’模式在Git1.7.11中已作介绍。如果你有时候使用旧版本的Git,
可以使用‘current’模式来代替‘simple’模式。)


打开github仓库查看推送的内容

git高频常用功能

git commit

修改提交,首先更改默认编辑器
git config --global core.editor gedit
git commit --amend
修改之前的提交的commit就可以了
https://blog.csdn.net/u010168781/article/details/81902689
使用命令:git reset --soft HEAD^  撤销commit
使用命令:git reset --hard HEAD^  撤销addreset 命令只能回滚最新的提交,无法满足保留最后一次提交只回滚之前的某次提交。
HEAD^ 表示上一个版本,即上一次的commit,几个^代表几次提交,如果回滚两次就是HEAD^^。
也可以写成HEAD~1,如果进行两次的commit,想要都撤回,可以使用HEAD~2。--soft
不删除工作空间的改动代码 ,撤销commit,不撤销add--hard删除工作空间的改动代码,撤销commit且撤销add如果commit后面的注释写错了,可以运行git commit --amend 

git diff

查看当前正在编辑的文件和提交的最新版本之间的区别
git diff .
git diff filename比较两个版本之间的差异
git diff id1 id2 比较两个分支之间的差异
git diff branch1 branch2

git reset

git log可以查看提交历史
git reflog可以查看git log看不到的提交历史
commit id 指定要回到哪个版本

通过commit id切换任意一个版本

git reset --hard commit_id
git reset --hard ad44ad764c207611236241c88393943eebfa93c2

submodule

git clone 的仓库才可以在目录下输入下面命令下载第三方库

git submodule init
git submodule update

git branch 用法汇总

查看本地分支:
git branch查看远程分支:
git branch -r查看远程和本地分支
git branch -a创建分支
git branch branch-name切换本地分支
git checkout branch-name删除本地分支
git branch -d branch-name删除远程的分支
git push origin --delete branch-name创建分支并切换到这个分支
git checkout -b branch-namegit branch -v
查看本地分支和远程分支映射关系撤销本地分支与远程分支的跟踪关系
git branch --unset-upstream推送本地分支到远程仓库,建立本地分支与远程分支的跟踪关系,使用git pull或者git push时不必指定从远程的哪个分支拉取合并以及推送到远程的哪个分支了。
git push --set-upstream origin branch-name合并分支
git merge

取消跟踪

对所有文件都取消跟踪

git rm -r --cached .   //不删除本地文件
git rm -r --f .   //删除本地文件

对某个文件取消跟踪

git rm -r --cached readme1.txt    删除readme1.txt的跟踪,并保留在本地。
git rm -r --f readme1.txt    删除readme1.txt的跟踪,并且删除本地文件。

配置忽略文件

.gitignore 忽略刚才文件

如果你在创建或修改.gitignore文件之前就已经push项目了,即使你在.gitignore文件中写入新的规则,这些规则也不会起作用。
原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
这时候我们还需要先把本地缓存删除(改变成未track状态),然后再提交,即更新.gitignore后如何提交具体如下

git rm -r --cached .//清空缓存
git add .//重新提交
git commit -m "update .gitignore"

当我们需要删除暂存区或分支上的文件,同时工作区也不需要这个文件了,可以使用

git rm file_path
git commit -m 'delete somefile'
git push

当我们需要删除暂存区或分支上的文件,但本地又需要使用,只是不希望这个文件被版本控制,可以使用

git rm --cached file_path
git commit -m 'delete remote somefile'
git push

常见报错

fatal: The remote end hung up unexpectedly

原因是推送的文件太大,缓存不够,网络不行
方法一:

git config --global http.postBuffer 524288000
git config --global http.postBuffer 1048576000

方法二:
配置git的最低速度和最低速度时间:–global配置对当前用户生效,如果需要对所有用户生效,则用–system

方法三:

fatal: The remote end hung up unexpectedlyB | 2.00 KiB/s

方法四:

git config --global sendpack.sideband false
和git config --local sendpack.sideband false
如果第一个设置后可以push成功,就不用设置第二个了

warning: remote HEAD refers to nonexistent ref, unable to checkout.

git clone http://xxx/xxx/xxx.git
warning: remote HEAD refers to nonexistent ref, unable to checkout.
warning: 远程 HEAD 指向一个不存在的引用,无法检出。

原因是.git目录下.git/refs/heads不存在HEAD指向的文件,

查看所有分支命令:git branch -a



拉取远程分支上命令: git checkout remotes/origin/master
新建分支命令: git checkout -b xxx/xxx

创建并切换到这个分支

git checkout -b

升级Git

// 查看git版本
git --version
// 更新源
sudo apt update
// 向 PPA 中添加 git 的软件源
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git

ssh-keygen


添加公钥到gitee

设置->SSH公钥->添加标题和公钥->点击确定

git remote add

error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413
fatal: the remote end hung up unexpectedly
添加远程仓库,要新增远程,请在终端上存储仓库的目录中使用 git remote add 命令。git remote add 命令使用两个参数:远程命令,如 origin
远程 URL,如 https://github.com/user/repo.git
例如:$ git remote add origin git@gitee.com:xiaoqiuslam/zero_start_learning_slam.git
# Set a new remote$ git remote -v
# Verify new remote
> origin  https://github.com/user/repo.git (fetch)
> origin  https://github.com/user/repo.git (push)

同时推送到Github和Gitee

[core]repositoryformatversion = 0filemode = truebare = falselogallrefupdates = true
[remote "github"]url = https://ghp_5SKV4zhPZKNy9sJb3Nnlvw22rMWG@github.com/slamshizhanjiaocheng/zero_start_learning_slam.gitfetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]remote = githubmerge = refs/heads/main
[remote "gitee"]url = git@gitee.com:xiaoqiuslam/zero_start_learning_slam.gitfetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]remote = giteemerge = refs/heads/master

git修改.gitignore后使其配置生效方法

git rm -r --cached .  #清除缓存
git add . #重新trace file
git commit -m "update .gitignore" #提交和注释
git push origin master #可选,如果需要同步到remote上的话git rm --cached .gitignore
git add .gitignore
git commit -m "update .gitignore"

更改 nano为vim

首先确保已经安装vim

sudo apt-get install vim

然后更改 nano为vim

code .git/config

合并连续非连续commit

pick 的意思是要会执行这个 commit
squash 的意思是这个 commit 会被合并到前一个commit

# p, pick = 使用提交
# r, reword = 使用提交,但修改提交说明
# e, edit = 使用提交,但停止以便进行提交修补
# s, squash = 使用提交,但和前一个版本融合
# f, fixup = 类似于 "squash",但丢弃提交说明日志
# x, exec = 使用 shell 运行命令(此行剩余部分)
# d, drop = 删除提交
git log --oneline
git rebase -i 66a4a11要合并的改为s

pick 02c6acf 结账脚本优化
pick fa980a1 方法属性变更,方便使用非静态成员变量
pick b124585 结账脚本优化

pick fa980a1 方法属性变更,方便使用非静态成员变量
pick 02c6acf 结账脚本优化
squash b124585 结账脚本优化

Error: Command failed with exit 128: git

git config --global --add safe.directory /opt/homebrew/Library/Taps/homebrew/homebrew-core
git config --global --add safe.directory /opt/homebrew/Library/Taps/homebrew/homebrew-cask

参考文档

https://github.com/
https://git-scm.com/
https://about.gitlab.com/
https://www.yiibai.com/git/git_diff.html

Ubuntu系统下Git版本控制使用教程|1-6相关推荐

  1. Ubuntu系统下Git的使用

    -----------------------------------------------------Git安装------------------------------------------ ...

  2. 解决Ubuntu系统下git clone下载速度较慢的问题(亲测有效)

    常见问题使用Git clone下载网速通常有十几kb,下载较慢. 使用以下指令即可解决: //这是我们要clone的,通常是github.com需要替换掉,就是在github.com后面加上.cnpm ...

  3. Ubuntu系统下安装SQLite Browser教程

    一.参考资料 Install SQLite and SQLite Browser on Ubuntu 18.04 LTS Linux 下安装可视化数据库浏览器 DB Browser for SQLit ...

  4. ubuntu系统下git push时出现问题 git clone:Failed to connect to github.com port 443: Connection refused解决办法

    在VMware虚拟机Ubuntu20.04上git push ORB_SLAM2 项目时出现了如下报错 解决方案: 如果没有开vpn 首先将 http://github.com/任意项目路径 切换为 ...

  5. IntelliJ IDEA使用教程(动图详解):Ubuntu 系统下安装 IntelliJ IDEA

    Ubuntu 系统下安装 IntelliJ IDEA 系统要求 系统支持:只要是支持 GNOME 或 KDE 桌面系统,建议是 Ubuntu(32位和64位都可以) JDK 版本:Oracle JDK ...

  6. Ubuntu系统下使用ROS(moveit )连接ABB实体机器人(irb120)(1.控制仿真)

    前言: 经过两天的踩坑,终于将ROS与ABB连接成功,可以通过rviz的gui界面拖动机械臂来控制实体ABB机械臂进行运动,因为网络上的教程(几位博主和ROS WIKI等)个别步骤的不完整,所以走了很 ...

  7. 安卓9.0刷linux,Ubuntu系统下编译Android 9.0系统

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 前言 在Ubuntu系统下编译Android系统.哎呀不知道是不是换了新电脑的缘故,这次编译居然从安装JDK和配置环境下 ...

  8. win10下git的配置教程

    win10下git的配置教程 下载并安装git 登录git的官方网站,下载git.注意在windows,linux,mac系统上的下载版本不同,要根据自己的本地环境来选择安装包,如下图所示,这里我们选 ...

  9. redhat和ubuntu系统下挂载ntfs文件系统的方法(转载)

    1.首先确定你的linux kernel版本是什么(Redhat9.0默认的kernel版本是2.4.20-8 )  #> rpm -qa|grep kernel  会显示类式的如下信息:  k ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装python-pyqt5软件包(python 2.7)
  2. struts2导入excel模板_「微干货」“人员其他数据导入”应用介绍
  3. java.lang.IllegalStateException: Failed to read Class-Path attribute from manifest of jar file:/XXX
  4. [数据结构-严蔚敏版]P48栈的链式表示
  5. input子系统基础之按键4——输入核心层源码分析
  6. MySQL5.7更改密码时出现ERROR 1054
  7. 小汤学编程之MySQL(一)——基本概念、使用前的准备和了解SQL
  8. 国内规模最大的商业WiFi运营商百米生活挂牌新三板
  9. linux16.04下安装Clion2019.2记录以及C++代码运行
  10. linux中查找find命令的程序文件,如何使用find命令在Linux中查找文件
  11. word解除限制编辑(亲测有效)
  12. 六度空间理论(小世界理论)否定了结构洞的存在
  13. 站班汇报 水印 加相册插件
  14. c# directory.getfiles按照文件名称
  15. Spark~~SparkCore
  16. Tableau 仪表板例子1
  17. php上传文件产生的临时文件问题,以及所谓的资源类型到底是什么
  18. uni-app的初步了解
  19. 魅族手机魅蓝note处于开发者模式,如何打开USB调试
  20. Matplotlib学习手册A005_Figure的add_axes()方法

热门文章

  1. Autoit v3的介绍
  2. 【东南亚最大互联网公司 Grab 招人啦~】
  3. 蓝桥杯书的笔记(二:接上篇蓝桥云课里的内容,C++)
  4. 深入解读DAMA-DMBOK2
  5. 删除appstore
  6. 基于hexo和aws云搭建个人博客,0基础0费用,有点豪横(2W字超详细图文教程)
  7. Spring @Value默认值
  8. will和would,can和could的区别
  9. oracle+xquery函数,oracle_xquery介绍.doc
  10. 【科技百咖】数据宝创始人汤寒林:得数据者得天下