Git学习笔记(个人)

1、回退操作:

1)首先要知道回退到哪个版本------查看版本

git log
example:

$ git log	//查看提交历史
commit 6c6876429507272b45e4e34bec3e911e08aa4638 (HEAD -> master)
Author: wujunfeng <wujunfeng@sinandata.com>
Date:   Tue Jul 5 11:19:50 2022 +0800

    append GPL

commit c4e7ae4bd526a6b5223bf0e2bedc6c8bd0936ae6
Author: wujunfeng <wujunfeng@sinandata.com>
Date:   Tue Jul 5 11:15:11 2022 +0800

    edit a readme file
2)回退到指定版本

git reset -hard HEAD^ //回退到上个版本HEAD^ 上上个:HEAD^^ 回退100个:HEAD~100
HEAD is now at c4e7ae4 edit a readme file

ps:回退后就看不到之前的那次记录了:GPL

3)回退到回退前----通过版本实现:commit id

$ git reset --hard 6c687	//commit id的前几位就行
HEAD is now at 6c68764 append GPL

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:

┌────┐
│HEAD│
└────┘
   │
   └──> ○ append GPL
        │
        ○ edit a readme file

git有个命令记录了所有操作的commit id

$ git reflog	//查看命令历史
6c68764 (HEAD -> master) HEAD@{0}: reset: moving to 6c687
c4e7ae4 HEAD@{1}: reset: moving to HEAD^
6c68764 (HEAD -> master) HEAD@{2}: commit: append GPL
c4e7ae4 HEAD@{3}: commit (initial): edit a readme file

2、代码提交

git add xxx //是将改动的文件提交到暂存区(index/storage)
git commit -m “modify xxx” //将暂存区中的文件全部提交到本地代码仓库(repository)
git push origin master //将本地仓库中的master分支的代码提交到远程仓库中

暂存区—>本地仓库—>远程仓库

3、撤销操作

在工作区域进行撤销上一次的操作使用:git checkout – fileName
git checkout – file 命令中的 – 很重要,没有–,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令

撤销暂存区的修改:
1)使用 git reset HEAD xxx 可以把暂存区的修改撤销掉(unstage),重新放回工作区
2)使用 git checkout – xxx

撤销本地仓库的修改:只能使用版本回退实现
一旦提交到了远程仓库就无法回退

4、向远程仓库提交代码(GitHub)

在C盘.ssh目录下打开git bash
1)执行ssh-keygen -t rsa //用于生成秘钥和公钥
2)复制id_rsa.pub文件内的公钥,到GitHub上add SSH key
可选:
3)
3.1)执行ssh-agent -s
3.2)执行ssh-add ~/.ssh/id_rsa
执行ssh-add时出现Could not open a connection to your authentication agent
在执行 ssh-add ~/.ssh/id_ras 时发生此错,
执行如下命令 ssh-agent bash 然后再执行 ssh-add ~/.ssh/id_ras 即可。

向GitHub中提交代码步骤:

1)复制GitHub中已存在的仓库SSH链接:git@github.com:JAVA-M/study-01.git
2)在git bash中执行:git remote add origin git@github.com:JAVA-M/study-01.git
上面该步骤就是将GitHub中的仓库和当前git目录下的仓库建立起连接
3)将本地仓库中的代码提交到远程仓库:git push -u origin master //将本地master分支提交到远程仓库去
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支
内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,
在以后的推送或者拉取时就可以简化命令。

通过上面一系列操作后,下次提交代码只需执行git push origin master 即可。

核心 关联远程仓库:git remote add origin git@github.com:JAVA-M/study-01.git

5、分支操作

1)创建新分支
git checkot -b dev    //创建一个dev分支的同时切换到该分支上来(-b参数就是这个功能)
上面这个指令等价于下面两个指令:
$ git branch dev	//创建分支
$ git checkout dev	//切换分支
Switched to branch 'dev
2)查看当前的分支
$ git branch
\* dev	// “*” 指向当前的分支
  main
3)切换分支
git checkout main  	//切换到主分支
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

===================== switch =====================
使用switch指令

//创建一个新分支并且切换到该分支
git switch -c dev
//仅切换分支
git switch dev

4)合并分支

git merge dev //将dev分支和当前分支(main)合并在一起
Updating 9aaefb2…cc0530b
Fast-forward //这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快,但不是每次合并都是快进模式
Hello.java | 5 +++++
1 file changed, 5 insertions(+)

5)删除分支

git branch -d dev //删除dev分支
Deleted branch dev (was cc0530b).

因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,
这和直接在master分支上工作效果是一样的,但过程更安全。

ps: 如果分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用大写的-D参数

关于合并分支冲突的情况: 详情参考:

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

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

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

git merge --no-ff -m “merge with no-ff” dev
合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,
而fast forward合并就看不出来曾经做过合并。

6、其他指令

1)git stash //保存当前工作现场
2)git stash list //查看保存的工作现场
3)git stash apply //恢复工作现场
4)git stash drop //删除保存的工作现场
5)git stash pop //恢复工作现场的同时将原来保存的工作现场进行删除操作
6)git remote -v(可选) //查看远程连接仓库的信息

7、多人协作易出现的问题:

1)你的小伙伴的最新提交和你试图推送的提交有冲突
解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/dev抓下
来,然后,在本地合并,解决冲突,再推送

git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根
据提示,设置dev和origin/dev的链接:
$ git branch --set-upstream-to=origin/dev dev
Branch ‘dev’ set up to track remote branch ‘dev’ from ‘origin’.

报错实例:

$ git push origin dev
To github.com:michaelliao/learngit.git
 ! [rejected]        dev -> dev (non-fast-forward)
error: failed to push some refs to 'git@github.com:michaelliao/learngit.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

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

首先,可以试图用git push origin 推送自己的修改;

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

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

没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
这就是多人协作的工作模式,一旦熟悉了,就非常简单

== 克隆项目:
git clone git@github.com:JAVA-M/study-01.git

拉取最新代码(在已有.git初始化的项目下):
git pull origin main //拉取main分支的代码

8、标签

标签是要在分支上设置的,所以设置标签前要先切换到要目标分支上去
例如对dev分支设置标签:
git switch dev //切换到dev分支
git tag v1.0 //给dev分支设置标签v1.0

给已提交的版本设置标签:是通过commit id进行设置的
例如查看提交历史:

commit 918579c8ab0f0898713274680a16f56a1f078ede
Author: manxingfu <2519307389@qq.com>
Date:   Tue Jul 5 12:05:48 2022 +0800
  • 对该次提交设置tag:
    git tag v0.9 918579

  • 查看有哪些标签:
    git tag

  • 查看标签的信息
    git show v1.0 //查看标签v1.0的信息

  • 删除标签:
    1)删除本地标签
    git tag -d //通过tagName对tag进行删除
    2)删除远程标签
    git push origin :refs/tags/

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

如果要推送某个标签到远程,使用命令git push origin <tagname>
一次性推送全部尚未推送到远程的本地标签:git push origin --tags

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值