• Git浅浅入个门~


    1 Git

    1.1 安装配置

    1. install
    • 安装位置:$HOME/git
    • 二进制文件位置:/usr/bin/git
    /* Linux 源码安装 git */
    [username@hostname]$ git clone git://git.kernel.org/pub/scm/git/git.git
    [username@hostname]$ cd git
    [username@hostname]$ ./configure --prefix=/usr
    [username@hostname]$ make
    [username@hostname]$ sudo make install
    
    git --version // 查看git版本信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. config
    • git 配置文件位置:$HOME/.gitconfig
    /**
     * 1. --global 参数表示配置全局
     * 2. 单个 git 管理的项目中配置文件位置为: $PROJECT/.git/config
     */
    [username@hostname]$ git config --global --list // 列出当前配置 
    [username@hostname]$ git config --global user.name <用户名> // 配置用户名
    [username@hostname]$ git config --global user.email <邮箱> // 配置邮箱
    [username@hostname]$ git config credential.helper store // 鉴权凭证存储(配置后只需首次鉴权)
    [username@hostname]$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" // 配置命令别名(git log => git lg)
    [username@hostname]$ git config --global color.ui true // 配置颜色
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 配置 ssh
    • ssh相关文件位置:$HOME/.ssh
    [username@hostname]$ ssh-keygen -t rsa -C <邮箱> // 生成ssh密钥
    
    • 1
    1. 配置忽略文件
    • 文件位置:$HOME/.gitignore

    1.2 代码提交

    在这里插入图片描述

    [username@hostname]$ mkdir -p $PROJECT
    [username@hostname]$ cd $PROJECT
    [username@hostname]$ git init // 初始化本地库,创建 .git
    [username@hostname]$ git status // 查看本地库状态
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    1.2.1 添加修改(工作区 <=> 暂存区)

    1. 查看工作区的修改:git diff
    • git diff // 列出所有的修改

    • git diff // 列出若干文件的修改

    • git diff 检查的是工作区与暂存区之间的差异

    1. 撤销未添加到暂存区的修改:git checkout / git clean
    • git checkout // 撤销项目下所有的修改

    • git checkout . // 撤销当前文件夹下所有的修改

    • git checkout // 撤销若干文件的修改

    • git clean -f // untracked状态,撤销新增的文件

    • git clean -df // untracked状态,撤销新增的文件和文件夹

    1. 添加工作区的修改到暂存区:git add
    • git add // 从工作区添加若干文件的更改到暂存区
    • git add . //添加当前目录下所有更改
    • git add --all(-a) // 添加当前目录下所有更改
    1. 查看暂存区的内容:git ls-files
    • --cached(-c) // 显示暂存区中的文件,git ls-files命令默认的参数

    • --deleted(-d) // 显示删除的文件

    • --modified(-m) // 显示修改过的文件

    • --other(-o) // 显示没有被git跟踪的文件

    • --stage(-s) // 显示mode以及文件对应的Blob对象,

    • git cat-file -p

    1. 撤销暂存区的修改:git reset / git rm
    • git rm --cached // 删除暂存区的文件

    • git rm // 删除暂存区 和 工作区的文件

    • git reset // 暂存区的修改恢复到工作区

    • git reset --soft // 与git reset等价,回到已修改状态,修改的内容仍然在工作区中

    • git reset --hard // 回到未修改状态,清空暂存区和工作区

    • git reset --hard 相当于 git reset --soft + git checkout

    1.2.2 提交修改(暂存区 <=> 本地仓库)

    1. 提交暂存区的修改到本地仓库:git commit
    • git commit -m // 提交暂存区所有的修改
    • git commit -m // 提交暂存区若干文件的修改
    • git commit --amend // 修改提交信息
    1. 查看本地仓库的内容:git log
    • git reflog // 查看提交 commit 信息
    • git log // 查看提交 commit 详细信息
    1. 撤销commit
    • git reset --hard HEAD^ // 回退到本地仓库上一个版本
    • git reset --hard // 回退到指定版本
    • git reset // 回退且回到已修改状态,修改仍保留在工作区中
    • git reset --soft // 回退且回到已修改状态,修改仍保留在工作区中

    1.3 代码分支

    几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
    Git 分支实际上是指向更改快照的指针。

    1.3.1 分支CRUD

    默认分支:master

    1. 分支操作:git branch
    • git branch // 查看当前分支

    • git branch -a // 查看所有分支

    • git branch -v // 查看当前分支详细信息

    • git branch // 创建分支

    • git checkout // 切换分支

    • git checkout -b // 创建并切换到该分支上

    • git branch -m // 修改分支名

    • git branch -d // 删除分支

    1.3.2 分支整合

    1. 分支合并:git merge
      在这里插入图片描述
    • git checkout master -> git merge iss53 // master 分支合并 iss53 分支
    1. 分支变基:git rebase
      在这里插入图片描述
    • git rebase // 通用语法
    • git rebase master experiment // 对 experiment 分支变基(experiment 分支改变)

    执行上述命令的过程为:

    1. 切换到to-branch分支;
    2. 将to-branch中比upstream-branch多的commit先撤销掉,并将这些commit放在一块临时存储区($PROJECT/.git/rebase);
    3. 将upstream-branch中比to-branch多的commit应用到to-branch上,此刻to-branch和upstream-branch的代码状态一致;
    4. 将存放的临时存储区的commit重新应用到to-branch上;
    5. 结束。
      执行完上述第3步后,to-branch的代码状态已经改变,接着执行第4步时则可能会产生合并冲突。

    解决合并冲突几个常见的办法是:

    1. 手动编辑冲突文件,手动删除或者保留冲突的代码;

    2. 对于“both added”、“both deleted”、“both modified”等类型的冲突,若想完整地保留某一方的修改可以执行git checkout --ours(或者–theirs) <文件名>来选择想要保留的版本。需要注意的是由于git rebase 是先撤销再应用commit,所以这里的ours指的是upstream-branch,theirs指的是我们将要应用的临时commit。

    3. 对于“added by us/them”、“deleted by us/them”等类型的冲突需要使用git rm 和git add 来删除/添加file。在此过程中需要特别注意谁是us,谁是them。

      冲突解决完之后,
      使用git add 来标记冲突已解决,即更新这些内容的索引(index)(不需要 git commit),
      最后执行git rebase --continue继续。
      如果中间遇到某个补丁不需要应用,可以用下面命令忽略:git rebase --skip
      如果想回到rebase执行之前的状态,可以执行:git rebase --abort

    1.4 代码同步

    1.4.1 远程仓库

    1. 关联远程仓库:git remote
    • git remote // 关联远程仓库

    • git remote add // 关联远程仓库,并指定远程仓库的名字,默认为 origin

    • 可以同时关联多个远程仓库

    • git remote -v // 查看关联的远程仓库

    • git remote set-url // 修改远程仓库的url,name 是远程仓库的名字

    1. 拉取远程仓库代码:git clone / git fetch
    • git clone -b // 克隆远程仓库指定分支
    • git clone -b --recurse-submodules // 克隆子仓库
    • git fetch : // 拉取远程仓库指定分支为本地指定分支,name 是远程仓库的名字

    1.4.2 拉取推送

    1. 拉取远程仓库来更新本地仓库:git pull
    • git pull origin <远程分支名>:<本地分支名> // 将远程指定分支 拉取到 本地指定分支上
    • git pull origin <远程分支名> // 将远程指定分支 拉取到 本地当前分支上
    • git pull // 将与同名的远程分支 拉取到 本地当前分支上
    1. 推送本地仓库到远程仓库:git push
    • git push origin <本地分支名>:<远程分支名> // 将本地当前分支 推送到 远程指定分支上
    • git push origin <本地分支名>// 将本地当前分支 推送到 与本地当前分支同名的远程分支上
    • git push // 将本地当前分支 推送到 与本地当前分支同名的远程分支上

    1.5 其他操作

    1.5.1 git stash

    团队协作时,当远程仓库中已有新的提交,而本地修改的内容还未添加到暂存区时,可以使用 git stash 临时存储自己的修改内容,拉取最新的代码后继续开发。

    1. git stash save "some info" 	// 临时存储还未暂存的修改
    2. git pull 										// 拉取最新的代码
    3. git stash list 							// 查看临时存储栈中的信息
    4. git stash pop 								// 从临时存储栈中弹出栈顶的存储记录
    5. git stash clear 							// 清除临时存储栈
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.5.2 git submodule

    有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个。
    Git 通过子模块来解决这个问题。 子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。

    // 1. 拉取远程仓库指定分支 作为指定路径的子仓库,会创建新文件 .gitmodules
    git submodule add -b <branch-name> <url> <path> 
    // 2. 克隆含有子仓库的仓库时,子仓库是空的
    2.1 git submodule init   // 初始化配置
    2.2 git submodule update // 拉取子仓库
    git submodule update --init --recursive // 精简命令
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    关于多对多关系(即E-R图中m:n)中的界面展示优化
    私域增长 | 私域会员:9大连锁行业15个案例集锦
    九、less
    【程序人生】上海城市开发者社区小聚有感
    HTML+CSS
    AutowiredAnnotationBeanPostProcessor什么时候被实例化的?
    强化学习知多少?
    详解FreeRTOS:FreeRTOS任务删除过程源码分析(进阶篇—2)
    【深度学习实验】循环神经网络(一):循环神经网络(RNN)模型的实现与梯度裁剪
    springmvc静态资源配置
  • 原文地址:https://blog.csdn.net/weixin_44666217/article/details/128164796