Git和Github学习笔记

 

一,搭建Git环境并连接上Github

1,在linux安装git

yum install git  或者 sudo apt install git  看centos 还是ubuntu

安装成功后,使用

git --version

查看是否安装成功和版本号

 

2,进行Git配置,参考https://blog.csdn.net/weixin_40423553/article/details/78867807的第二步

git config –global user.name “your name” //配置用户名,比如abc

git config –global user.email “your email” //配置email,比如abc@qq.com

 

3,使用命令 ssh-keygen -t rsa -C “abc@qq.com” 生成ssh key,用于连接github的

过程中会提示按enter和yes

可能出现的问题和解决

https://blog.csdn.net/weixin_40816738/article/details/90247205

会在用户主目录或root目录下生成隐藏文件.ssh/id_rsa.pub

 

4,登录github,在settings 里面点击SSH and GPG Keys,添加一个ssh key,title

title是项目名,ssh key是上一步的.ssh/id_rsa.pub文件里面的内容复制出来粘贴上去。

在linux上使用ssh -T git@github.com命令验证是否连接成功

提示You’ve successfully authenticated, but GitHub does not provide shell access就是成功了

 

如果只是想下载github上的项目到本地,只需第1,2步,如果需要提交到github则需要1234。以上配置完成,下面是命令理解可以不看。

 

命令理解

https://blog.csdn.net/sjt19910311/article/details/83685616

git config --global 因为Git是分布式系统,配置了自己的名字和邮箱,这样就是有了“身份”

https://blog.csdn.net/weixin_42752574/article/details/106367959

ssh-keygen -t rsa -C “abc123@qq.com”

使用该命令获取公钥,t表示类型 RSA或DSA, C表示注释,给密钥一个注释

执行完会获得注释的公钥文件,将公钥复制到github里面。

ssh -T 是不显示终端的连接,T就是不需要终端

 

二,下载一个Github项目到本地

cd命令到任意想要放目录的地方

git clone https://github.com/xxxxx.git

链接在github找到想要down的项目即可

或者

git clone git@github.com:abcdefg/gitproject.git

三,创建一个新项目并上传到Github

1,在github上创建一个新的仓库,点击右上角的的+号,new repository,

填上 repository name 和 description ,点击 create repository,这样就创建出一个新的仓库/一个新的项目,会有仓库地址链接https://github.com/用户名/仓库名.git

 

2,在Linux中,cd命令到想要放新项目的目录,假设为/home/Gitproject/,使用git init 初始化仓库,即此目录可以被git管理。

会产生隐藏文件.git。

 

3,新建文件并提交

touch main.cpp 新建一个文件在/home/Gitproject/里面

3.1使用 git add main.cpp 将文件添加到仓库

3.2使用 git commit -c “one change note” 将文件提交到仓库

3.1可以同时add多个文件

3.2是将3.1所add的所有文件都提交到仓库

 

理解,

git add将文件存入暂缓区

git commit将暂缓区的文件全都提交到仓库,commit可以理解成一个版本,一次修改

git add . 将当前目录下的所有文件都提交,防止漏add

 

4,关联仓库与远程github仓库

使用git remote add origin http://github.com/用户名/仓库名.git

把当前仓库取名为 origin 和github仓库进行关联。

 

5,将本地库上传到github仓库

使用git push -u origin master

第一次加上 -u 之后就不需要,直接 git push origin master

将本地库提交到github上,就可以看到新提交的文件了

 

理解,

使用git status 和 git diff可以查看当前的状态和修改过的变化,

git status查看哪些文件被改过

git diff 文件名 查看文件哪里被该过

git remote rm <name>命令可以删除远程库,使用前,建议先用git remote -v查看远程库信息

 

 

四,版本更换

1,使用git reset --hard commit_id

可以将版本回退到指定commitI的各个版本

2, 使用git reset --hard head 回退到当前版本,即清空暂存区,同时还将工作区的改成与当前版本一致

3. 使用git reset --hard head^ 回退到上一个版本

4.使用git reset --hard head~100 回退到前100个版本

git log  查看commit的记录。或者用git log --pretty=oneline

git reflog 用来记录你的每一次命令

 

不同场景的用法

1,当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

2,当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

3,已经提交了不合适的修改到版本库时,想要撤销本次提交,参考上面的git reset --hard head^等命令,不过前提是没有推送到远程库。

 

在1中git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

如果在工作区删除了文件file,但这个file曾经提交到版本库,可以通道git checkout --file恢复它,如果git status发现版本库与工作区不一样,且真的想要删掉它,就用git rm file

 

关于--hard --soft --mixed 下面会有更详细的理解

 

五,Git结构

https://www.liaoxuefeng.com/wiki/896043488029600/897271968352576

首先需要理解一些概念

1,我们在/home/Gitproject/目录创建了一个仓库,这个目录我们称之为工作区

2,在/home/Gitproject/.git里面,有一个暂存区,里面包含了我们add过程中的所有文件

3,在整个/home/Gitproject/.git,我们称之为版本库,里面包含了我们commit过程中的各个版本

所以仓库的流程就是 add一个文件到暂存区,commit暂存区的所有文件到仓库中,作为一个版本。

commit之后,暂存区就空了,可以理解成一个集装箱,add往集装箱装货,commit将集装箱打包送货出去。

 

六,创建分支与切换

1,使用git checkout -b 分支名命令可以创建分支并切换到该分支

相当于两条命令

1.1git branch 分支名      创建分支

1.2git checkout 分支名     切换分支

 

2,查看当前分支情况

git branch

 

新版已经支持用swithc来创建和切换分支了,因为checkout的用法很怪

git switch -c <name> 进行创建和切换

git swithc 分支名   进行切换

 

3,合并分支

git merge dev

假如当前是master分支,使用上面的命令将会合并指定分支到当前分支。例如在dev分支中建立文件file2,在master看不到,使用git merge dev后,将会看到这个文件

合并之后就可以删除这个分支了

git branch -d dev

git log --graph命令可以看到分支合并图

当存在冲突时,需要手动进行修改commit再合并,在git status 可以看到冲突信息

 

使用git merge dev可以合并分支,但是合并之后,会丢失分支信息,这样就不好看到曾经做过的分支内容

使用带--no-ff命令将会保留分支信息,同时创建新的commit进行连接

git merge --no--ff -m "meger dev" dev

因为会有新的commit,所以要给个标注

 

七,bug解决与分支问题

1,使用git stash可以隐藏当前分支

2,使用git stash list查看隐藏了的分支,

恢复方式一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了:

在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。

 

8,feature分支

feature分支用于已经开发好的分支,然后需要将其删掉

1,创建并切换到feature分支,准备进行项目的更新开发。

git checkout -b feature

 

 

2,回到master分支准备合并

git checkout master

但是领导说这个功能不要了

 

3,强制删除未合并的分支

git branch -D feature

 

9,多人协作

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

小结

  • 查看远程库信息,使用git remote -v

  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;

  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

 

  • rebase操作可以把本地未push的分叉提交历史整理成直线;

  • rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

git rebase   f1  f2

将f2的分支内容添加到f1之后,当前指针指向f2

 

10,标签管理

使用tag来指向一个commit用来表示版本

1,切换到需要打标签的分支

git checkout  分支名

 

2,打标签

git tag v1.0

v1.0就是标签

 

3,查看所有标签

git tag

 

4,查看指定标签

git tag -a <tagname> -m "blablabla..."可以指定标签信息

 

5,对指定commit打标签

git tag v0.9 fkldjf

 

6,删除标签

git tag -d v0.1

  • 命令git push origin <tagname>可以推送一个本地标签;

  • 命令git push origin --tags可以推送全部未推送过的本地标签;

  • 命令git tag -d <tagname>可以删除一个本地标签;

  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

 

10,远程分支

使用git fetch命令更新远程分支的状态,远程分支为o/main,我们不能对其进行修改

在使用git checkout o/main时会分离出HEAD,从而对HEAD进行操作。

 

git fetch 并不会下载文件到本地影响

 

那么如果想要合并自己的分支与远程分支,

很容易可以用 git fetch  git merge

在git中添加了git pull命令来完成这一操作

git pull将更新远程分支,同时合并到当前分支来

 

 

而push将自己的变更上传到远程库,在远程库合并新的提交。

 

如果远程库修改过,我本地未fetch最新版的远程库,就开发了新的功能

那么就需要用 git fetch   git rebase git push实现提交

可以用 git push --rebase    git push实现

 

11,回退reset

 

11,命令简记

git的区有:工作区,暂存区,版本库,远程库

git add xxx      将xxx文件或目录从工作区添加到暂存区

git commit -m “xxx”    将暂存区的所有文件提交到版本库成为一个“新版本”,-m “xxx” 为其打标注

git push           将版本库内容推送到远程库

git branch abc  在当前位置新建分支abc,也可以用git checkout -b abc

git fetch          将远程库内容同步到本地,不是同步文件,因为没有带参数,所以是所有分支

git merge   abc    将abc分支合并到当前分支上来

git pull            将远程库内容同步到本地,同时合并到当前分支,相当于 git fetch + git merge

git  cherry-pick   abc     将版本abc的内容添加到当前分支

git rebase -i  abc      将当前分支整体移动到abc分支上去,还是指向当前分支,但是接在abc分支后面

git rebase abc  def       def为当前分支,添加到abc分支后面,还是指向def分支,但是接在abc分支后面

 

git reset HEAD   回退到当前版本,即把暂存区清空,工作区不变,(用git status会提示工作区有些文件没有add到暂存区)

git reset --hard  HEAD  回退到当前版本,把暂存区和工作区清空,保持和版本库的当前版本一样(用git status会提示干净,因为在工作区新写的文件都没了)

 

git reset HEAD^   默认参数是mixup,回退到上一个版本,即把暂存区清空,工作区不变(用git status会提示工作区有些文件没有add到暂存区)

git reset --hard HEAD^   回退到上一个版本,把暂存区和工作区清空,保持和版本库的当前版本一样(用git status会提示干净,因为在工作区新写的文件都没了)

git reset --soft HEAD^     回退到上一个版本,工作区不变,暂存区不变,相当于我不想commit了,再写写代码再commit(用git status会提示干净,因为是恢复到将要commit前的状态)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值