关于git:git学习笔记

本地 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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理