Git使用笔记

常用命令

一、创建仓库

本地到远程

1. 本地创建

在本地新建的项目目录内(就是空文件夹)打开 git bash(win右键),输入

git init

完成初始化
安装git问题以及链接远程库的问题参考:https://blog.csdn.net/qq_29493173/article/details/113094143

选择下载项目ZIP到本地以后的流程类似

2. 下载项目到本地

远程到本地

复现或者修改别人的仓库,要先fork一下,使自己的账户里出现一个同样的仓库,然后复制自己仓库的链接,否则有可能是没有权限推送分支的。

在GitHub上,可以任意Fork开源仓库;

自己拥有Fork后的仓库的读写权限;

可以推送pull request给官方仓库来贡献代码。

用git clone下载:
需要更改的部分是服务名,用户名和仓库名
从github拷贝的项目服务名就是github,其他类似


git clone git@服务名.com:用户名/仓库名.git

或者可以直接从下图中红框处点击复制链接
然后在git bash中

git clone 复制的链接

就行了
在这里插入图片描述
引用廖大佬的话:
GitHub给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。

使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https

二、查看状态

查看当前状态
git status

查看远程库状态

git remote -v

三、添加到缓存区

缓存区的概念图

借自廖雪峰大佬那里
在这里插入图片描述

添加

git add filename

删除

首先,可以在本地进行删除,即对工作区进行操作
其次,对暂存区的操作和add类似,有:

git rm filename

小提示:先手动删除文件,然后使用git add和直接使用git rm 删除文件效果是一样的,git rm会直接删除暂存区和工作区的对应文件。

注意:从来没有被添加到版本库就被删除的文件,是无法恢复的!
也就是说如果新增文件没有经过commit就删除了,就无法用git找回了。

删除以后进行上传命令commmit,就删除了暂存区中的对应文件。
可以多次添加/删除,也可以同时添加多个文件,但add/rm操作只是添加到暂存区staged

四、操作回退

1. add/rm之前的修改是工作区内的修改,可以通过checkout回退工作区中的修改(工作区回退)

git checkout -- filename

或者(上面老方法,下面新方法)

git restore filename

如果已经添加到暂存区中没上传,会回退到暂存区内的版本,若没有,会回退到最新的版本库版本。

2. add/rm操作后的工作区修改可以通过下面命令退回到add/rm到暂存区之前的状态(暂存区回退)

git reset HEAD filename

或者(上面老方法,下面新方法)

git restore --staged filename

3. 解除本地库与远程库的连接:origin是默认的远程库名,以自己建立连接时设定的名字为准
```git
git remote rm origin

git remote rm origin

五、上传到版本库

提交命令

git commit -m "此次提交的备注"

每提交一次就会给版本库的时间轴多一个节点
养成好习惯,提交上传带备注!

版本跳转

版本跳转是本地版本库的操作,如果已经远程push到远程库,则无法对push以后的内容进行回退了,因为接下来的操作是远程库负责的。

版本可以通过两种方式跳转:
1. 版本回退,相对指针HEAD指向当前最新版本,HEAD^指向上一个版本 以此类推 前100个版本为HEAD~100,通过这种方式回退以后 后面的版本显然就变成了未来版本,无法再通过相对指针回到未来。
git reset --hard HEAD^

2. 绝对指针跳转,每个版本由32位的随机代码组成,输入前几位绝对代码值可以进行任意版本的跳转:

```git
git reset --hard 3d3c

上面命令可以跳转到3d3c开头的代码指向的版本,记住绝对值码,就可以跳转到任意版本,查看绝对值码的方法为:

六、查看日志

查看提交日志

默认查看详细日志,也可以通过参数查看简明日志

查看命令日志

命令日志中包括回退操作在内的所有版本相关操作都有记录

1. 详细日志
git log

2. 简明日志
git log --pretty=oneline

3. 命令日志
git reflog

三种查看日志的方法返回的结果中,每个日志开头的就是版本号,下面是reflog的例子,每行记录一个命令日志,前七位就是版本号
在这里插入图片描述

七、分支

分支的功能就类似于C语言中的指针,所以git中对分支的操作是非常快捷和高效的,并不是每创建一个分支都创建了新的一堆当前状态的文件,而只是多了一个指针而已,分支的合并也只需要两个指针指向同一个位置即可,所以分支的合并是非常重要的事情,要慎重!

创建分支有两种方法

git checkout -b 分支名

以及

git branch 分支名

第一种的-b参数表示创建后转换到新创建的分支,相当于先创建再切换两步合一,新建分支时比较常用
第二种是git branch命令,是针对分支的各种操作,不加参数时就是创建一个分支

分支操作branch

常用的git branch命令参数有:
-a 查看所有本地和(已建立联系的)远程分支
-d 删除分支

分支的切换

git checkout 分支名

checkout既能回退操作又能切换分支显然有些功能定位不明确,所以有专门的分支切换命令

git switch 分支名

常用参数:
-c 创建并切换

注意 大坑

git switch切换分支时会把未add或未commit的内容带过去
以前的旧版本git中,B分支下进行的操作改动没有add和commit时是无法跳转到其他分支的,但新版本目前可以

参考某网友的观点,“因为未add的内容不属于任何一个分支, 未commit的内容也不属于任何一个分支。 也就是说,对于所有分支而言, 工作区和暂存区是公共的”

所以就会出现在B分支下改动且未更新到缓冲区和版本库上的文件,在A分支上可以看到已经被修改,且如果此时用A分支添加和提交,日志中就会把这次修改算到A分支上

所以,切换分支前,一定要git status !!!

如果确实有尚未add和commit的工作,但是并未完成不方便进行提交,可以利用git stash进行现场保留,然后跳转。

实测(比较绕可以不看):
在B分支中改动文件后直接切换至A分支,然后查看同名文件,此时从A分支看到的是B分支修改过后的那个而不是A分支本来保存的那个,再切换回B分支,将在B分支中改动的文件在B分支中上传后再切换至A分支,此时AB分支的同一个文件内容就不同了,B分支中为修改过后的,A分支中为A最近保存过的

而git checkout 会直接报错不能切换,

分支的合并merge

git merge 分支名

该命令表示将特定分支合并到当前分支

注意 不同分支同时上传了对同一个文件的修改时,合并这两个分支会产生冲突,需要先解决冲突才能合并,此时状态会变成合并状态,只有提交了解决冲突后的文件时,才会变成正常状态

查看分支合成图
git log --graph --pretty=oneline --abbrev-commit

分支的删除

git branch -d 分支名
没有合并的分支可能在删除的时候会报错,如果确实要删除,可以用-D来强制删除

分支的使用

尽量在主分支master上创建dev分支作为日常工作的分支,只将主分支作为发布新版本集合的分支,平常的工作都先经过提交给dev后积累到一定程度并保证无冲突再提交到主分支,相当于给默认展示的主分支一个缓冲区,避免不必要的麻烦。

bug分支

在有分支未提交或暂时无法提交的情况下,需要切换分支修复bug时可以使用git stash保留现场,此时查看状态会发现状态已经正常,进行完bug修复后,再通过git stash list查看快照列表

恢复现场有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不会删除,需要用git stash drop手动删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了。
相关代码为:

保存现场
git stash
现场列表
git stash list
弹出第一个现场的副本
git stash apply
弹出第一个现场
git stash pop
恢复列表中指定的stash:(大括号中为下标)
git stash apply stash@{0}

在主分支上修复了bug后,开发用的dev分支是早期从master分支分出来的,所以,这个bug其实在当前dev分支上也存在。

同样的bug,要在dev上修复,只需要把修复bug的那次提交所做的修改“复制”到dev分支。

为了方便操作,Git专门提供了一个cherry-pick命令,让我们能复制一个特定的提交到当前分支:

跳转到需要同步修复的分支,如dev
git checkout dev
同步某一个修改到当前分支 后面的七位code替换为待同步的commit的代码
git cherry-pick e3ddb80

修改上游分支

要修改本地分支的上游远程分支,可以使用 git branch 命令来实现。下面是在 Git 中修改本地分支的上游远程分支的步骤:

  1. 查看当前分支的上游远程分支:

    在终端或命令提示符中,进入到你的项目目录,并运行以下命令来查看当前分支的上游远程分支:

    git branch -vv
    

    这会列出所有本地分支及其关联的远程分支。找到你想要修改上游分支的本地分支。

  2. 修改上游远程分支:

    假设你想要将本地分支 feature 的上游远程分支修改为 origin/development,你可以运行以下命令:

    git branch --set-upstream-to=origin/development feature
    

    这将把本地分支 feature 的上游远程分支更改为 origin/development

    或者,你也可以使用简化的形式:

    git branch -u origin/development feature
    

    如果你想将上游远程分支置空,可以使用以下命令:

    git branch --unset-upstream feature
    

    确认修改:

    运行 git branch -vv 再次确认上游远程分支是否已经成功修改。

请注意,以上命令中的 feature 是本地分支的名称,origin/development 是你希望设置为上游分支的远程分支名称。确保在运行命令时,替换为你实际使用的分支名称。

这些命令将帮助你在 Git 中修改本地分支的上游远程分支。

八、pull和push

连接到库后,远程同步分支,要使一个本地分支和远程库中的分支建立默认连接时,加-u参数
branchname改成要推送的本地分支名称,如master,dev……

推送到远程分支
git push origin branchname

建立默认连接
git push -u origin master

获取远程分支信息(即github上的远程分支)
git fetch

将远程分支拉取到本地创建本地分支,本地和远程分支最好同名
git checkout -b branch-name origin/branch-name

在进行push操作时如果报错冲突,需要先pull解决冲突再push
git pull

九、标签

标签其实也是指向版本库中某次commit的指针,意义在于不需要再去找和记住某个特定版本的版本号前几位,可以通过标签直接跳转到指定版本

创建标签v1.0
git tag v1.0

查看标签
git tag

给指定的提交(假设版本号为f52c633)打标签
git tag v1.1 f52c633

如果要加备注,使用两个参数
git tag -a 标签名 -m "标签备注"

查看标签信息
git show tagname

删除标签
git tag -d tagname

推送标签
git push origin tagname
一次性推送标签
git push origin --tags

删除远程标签
git push origin :refs/tags/tagname

已知特性

  1. 在git bash命令行中,可以使用windows和linux的命令
  2. git暂存区存的是文件的修改而不是文件
  3. git版本库中使用HEAD指针指向当前的版本
  4. unix的哲学,没有消息就是好消息
  5. push之前的操作都是直接对本地文件进行的,会对工作区的文件实时产生影响。

常用命令表

本文为自学笔记,更详细的git教程请移步 廖雪峰

配置忽略文件笔记
有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked files …,有强迫症的童鞋心里肯定不爽。

好在Git考虑到了大家的感受,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore

忽略文件的原则是:

忽略操作系统自动生成的文件,比如缩略图等;
忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

over~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值