关于git:git学习笔记

4次阅读

共计 5982 个字符,预计需要花费 15 分钟才能阅读完成。

本地 git 的应用

ubuntu 装置 git

sudo apt install git

设置上传代码用户的标识(全程应用 git_demo 为例)

全局设置

$ git config --global user.name "name"
$ git config --global user.email "email@example.com"

独自为我的项目设置 git_demo 设置用户名和邮箱

$ cd git_demo
$ git init    // 将 git_demo 文件夹设为 git 我的项目,文件夹下呈现.git 文件夹用于管制我的项目
$ git config user.name "name"
$ git config user.email "email@example.com"

操作文件

当初我新建两个文件 demo01 demo02,并应用 git status 查看目前的状态。

ascrew@A11200421050195:~/workspace/personal/git_demo$ git status
位于分支 master

尚无提交

未跟踪的文件:(应用 "git add < 文件 >..." 以蕴含要提交的内容)demo01.txt
        demo02.txt

提交为空,然而存在尚未跟踪的文件(应用 "git add" 建设跟踪)

能够看到两个文件曾经被 git 发现,然而目前还没有跟踪这两个文件,他们还不受版本控制,作任何批改也不会有记录。这是须要两个命令对它们进行操作。add、commit

git add –all

add 会把文件放到暂存区期待后续 commit,能够了解 add 为把想要提交的文件和不打算提交又不打算还原的文件进行拆散开来。

gascrew@A11200421050195:~/workspace/personal/git_demo$ git status
位于分支 master

尚无提交

未跟踪的文件:(应用 "git add < 文件 >..." 以蕴含要提交的内容)demo01.txt
        demo02.txt

提交为空,然而存在尚未跟踪的文件(应用 "git add" 建设跟踪)
git commit -m “your commit notes”

commit 后文件就被保留到 git 环境里了,能够应用 git log 查看提交记录,其总 commit 前面一长串代码是本次提交的 id,用于辨认和还原代码等操作。

ascrew@A11200421050195:~/workspace/personal/git_demo$ git commit -m "第一次提交"
[master(根提交)7ed30bf] 第一次提交
 2 files changed, 2 insertions(+)
 create mode 100644 demo01.txt
 create mode 100644 demo02.txt
ascrew@A11200421050195:~/workspace/personal/git_demo$ git status
位于分支 master
无文件要提交,洁净的工作区
ascrew@A11200421050195:~/workspace/personal/git_demo$ git log
commit 7ed30bf2f44ebb2392a37b820adc1fa1458ec095 (HEAD -> master)
Author: Ascrew <1311585620@qq.com>
Date:   Wed Apr 21 17:11:13 2021 +0800

    第一次提交

在不同环境下 add 可能会呈现上面的提醒,这是因为不同操作系统下文件结尾的换行符不同,windows 默认是 CRLF(\r\n),Unix/Linux 个别是 LF(\n)。我过后是在 windows 下应用了 git 自带的 bash 终端进行了提交而呈现了提醒,之后始终应用 ubuntu 零碎就没遇到过了。解决办法能够看这篇文章 https://blog.csdn.net/feng88724/article/details/11600375

$ git add demo.py
warning: LF will be replaced by CRLF in demo.py.
The file will have its original line endings in your working directory
reset 还原

reset 有三个选项别离是 hard soft mixed,不加参数默认是 mixed 模式。

  • hard 会重置缓存区和本地目录,让你完完全全回归到指定版本。所以在缓存区和本地文件曾经改变的状况下,要小心应用 hard,别把想留着的货色删除了。上面是例子。

    ascrew@A11200421050195:~/workspace/personal/git_demo$ cat demo01
    this is demo01.
    
    // 最近一次提交版本号 a034c16(版本号个别记录前 7 位就足以定位一次记录)ascrew@A11200421050195:~/workspace/personal/git_demo$ git log
    commit a034c1611a84cf38b8ceea69fe0e674a06ad8946 (HEAD -> master)
    Author: Ascrew <1311585620@qq.com>
    Date:   Thu Apr 22 09:40:56 2021 +0800
    
        减少换行
    
    
    // modify demo01 and commit 
    ascrew@A11200421050195:~/workspace/personal/git_demo$ cat demo01
    this is demo01.
    add new content.
    
    // 最近一次提交版本号变为 ddfdf8b
    ascrew@A11200421050195:~/workspace/personal/git_demo$ git log
    commit ddfdf8bc809fef77dba5d457c9c65fc384f221f9 (HEAD -> master)
    Author: Ascrew <1311585620@qq.com>
    Date:   Thu Apr 22 09:58:26 2021 +0800
    
        add new line
    
    commit a034c1611a84cf38b8ceea69fe0e674a06ad8946
    Author: Ascrew <1311585620@qq.com>
    Date:   Thu Apr 22 09:40:56 2021 +0800
    
        减少换行
    
    // 进行 hard 回退操作
    ascrew@A11200421050195:~/workspace/personal/git_demo$ git reset --hard HEAD^
    HEAD 当初位于 a034c16 减少换行
    ascrew@A11200421050195:~/workspace/personal/git_demo$ git log
    commit a034c1611a84cf38b8ceea69fe0e674a06ad8946 (HEAD -> master)
    Author: Ascrew <1311585620@qq.com>
    Date:   Thu Apr 22 09:40:56 2021 +0800
    
        减少换行
        
    ascrew@A11200421050195:~/workspace/personal/git_demo$ cat demo01
    this is demo01.
  • soft 会把目前到回退版本之间的批改的内容放回缓存区(如果你本地还有批改并且并未放入缓存区时进行了 soft 回退操作,本地目录的也会和缓存区一样被保留)。应用 soft 的益处就是,你本地批改过的内容不会被擦除。

    ascrew@A11200421050195:~/workspace/personal/git_demo$ cat demo01
    this is demo01.
    add new line second.
    ascrew@A11200421050195:~/workspace/personal/git_demo$ git add --all
    ascrew@A11200421050195:~/workspace/personal/git_demo$ git commit -m 'add new line second'
    [master fe5eec1] add new line second
     1 file changed, 1 insertion(+)
    ascrew@A11200421050195:~/workspace/personal/git_demo$ git log
    commit fe5eec1e25e18423b01ceee998e8f49e303ecb90 (HEAD -> master)
    Author: Ascrew <1311585620@qq.com>
    Date:   Thu Apr 22 10:05:05 2021 +0800
    
        add new line second
    
    commit a034c1611a84cf38b8ceea69fe0e674a06ad8946
    Author: Ascrew <1311585620@qq.com>
    Date:   Thu Apr 22 09:40:56 2021 +0800
    
        减少换行
        
    // 应用 soft 回退
    ascrew@A11200421050195:~/workspace/personal/git_demo$ git status
    位于分支 master
    要提交的变更:(应用 "git restore --staged < 文件 >..." 以勾销暂存)批改:demo01
    
    ascrew@A11200421050195:~/workspace/personal/git_demo$ cat demo01
    this is demo01.
    add new line second.
  • mixed 根 soft 类似,区别是 mixed 会把批改过的全部内容放到本地目录,而暂存区是一点内容都没有的。

    ascrew@A11200421050195:~/workspace/personal/git_demo$ cat demo01
    this is demo01.
    add new line second.
    
    // 批改的 demo01
    ascrew@A11200421050195:~/workspace/personal/git_demo$ cat demo01
    this is demo01.
    add new line second.
    add new line for test mixed.
    
    ascrew@A11200421050195:~/workspace/personal/git_demo$ git reset HEAD^
    重置后勾销暂存的变更:M       demo01
    
    // 应用 mixed 回退
    ascrew@A11200421050195:~/workspace/personal/git_demo$ git status
    位于分支 master
    尚未暂存以备提交的变更:(应用 "git add < 文件 >..." 更新要提交的内容)(应用 "git restore < 文件 >..." 抛弃工作区的改变)批改:demo01

对于版本参数能够有多种:

  • HEAD^:示意上一个版本(或者 HEAD~)
  • HEAD^^ 示意上上个版本
  • HEAD~100,为上 100 个版本(或者打 HEAD 加上 100 个 ^ )

github

github 是一个云仓库,能够和本地双向传输。

github 与 开发机器绑定

首先要有一个 github 账户不多介绍。(我是 ubuntu)在 bash 终端创立 key,填入你在 github 的邮箱地址,前面始终 Enter 就行了。

 ssh-keygen -t rsa -C "youremail@example.com"

回车后,进入用户目录下 .ssh 文件夹,外面有 id_rsa 和 id_rsa.pub 文件这两个是 SSH Key 密钥对 id_rsa 是私钥,不要泄露。id_rsa.pub 是公钥,对外开放的。关上 id_rsa.pub 复制外面的内容。登录 github,关上 Account settingsSSH Keys and GPG keys 页面,点击 New SSH Key 填上任意 Title,在 Key 文本框里粘贴 id_rsa.pub 文件的内容,Add Key 之后就算是本地和 github 关联起来了,一个 github 账号能够关联多台机器,达到多人协同开发的目标。

我的项目关联

关联到 github 后还须要将本地我的项目对应到 github 账号上的我的项目,能力将本地代码提交到 github 或者从 github 更新本地代码。有两种状况进行绑定。(因为编写博客时网络起因无奈登陆 github,我应用 gitee 代替,他俩根本是一样的)

  • 状况一

    本地编写了一段时间的我的项目,想要放到 gitee 上持续保护。在 gitee 新建一个仓库与本地我的项目同名。之前我在本地新建 git 我的项目 git_demo,那么我也在 gitee 上新建一个 git_demo 而后将它俩关联起来,在 bash 中输出命令:

    git remote add origin https://gitee.com/zhgyu/git_demo.git
    git push -u origin master

-u 参数是把本地分支 master 和近程 gitee 上的 master 分支关联,并且通过 push 讲本地代码推送到近程分支上。关联之后就不须要在退出 -u 参数了。

  • 状况二

    从他人的 gitee 上下载我的项目并独特保护(前提是你曾经把 id_rsa.pub 中的 key 绑定到他的 gitee 上)。

    git clone https://gitee.com/zhgyu/git_demo.git

下载指定分支代码(近程分支名称 develop)

git clone -b develop https://gitee.com/zhgyu/git_demo.git

ascrew@A11200421050195:~/workspace/personal/git_demo$ git branch
* develop

推动与获取近程代码

push

上传本地 commit 后的代码到近程服务器,暂存区和本地目录批改的不做解决。

git push
pull

从近程下载代码

git pull

分支

查看分支

// 查看本地分支
git branch
// 查看近程所有分支
git branch -r
// 查看本地和近程的分支
git branch -a

本地创立分支并切换

git checkout -b hotfix

// 推送以后分支并建设与近程上游的跟踪
git push --set-upstream origin hotfix

本地分支与近程分支关联

git fetch origin 分支名称
git checkout -b < 本地分支名称 > origin/< 近程分支名称 >

删除分支

// 删除本地分支
git branch -D 分支名称
// 删除近程分支
git push origin --delete 分钟名称

解决反复输出帐号密码

此命令会在 config 文件中记录你的帐号密码。

// 全局
git config --global credential.helper store
// 独自我的项目中
git config credential.helper store
正文完
 0