Git使用教程

Git操作记录文档

安装git:

sudo apt install git

配置git账号:(用户名和邮箱需要注册)

git config --global user.name “git的用户名”

git config --global user.email “git的邮箱”

生成密钥添加到ssh

ssh-keygen -t rsa -C “git的邮箱”

img

看到以下内容表示成功

img

查看目录下密钥

img

复制密钥,别复制邮箱

img

img

img

img

检测是否可用ssh -T git@github.com

img


如果想要向github快速上传文件,可以通过Add file -> Upload files提交相应的文件:
在这里插入图片描述
在Commit changes提交相应的commit说明:

在这里插入图片描述
可以在自己的Github仓库中切换默认分支,选择Setting,进入界面后在默认分支右侧选择左右箭头符号,选择默认分支点击更新即可
在这里插入图片描述


注意有时候github代码上传被reject可能是因为token过期,进入setting->developer settings->personal access tokens->建立新的token(拍个照或者复制记下token)
在进行git push的时候会提示输入用户名和密码,输入对应的用户名和自己的token即可
如果是token过期更新完token出现分支不兼容的情况导致不能上传,尝试:
git pull 把自己本地缓存的代码更新到最新
git merge 把自己本地的代码与拉取的代码融合后就可以上传(以本地文件为准)


以下的git操作可以通过Vscode和Vscode终端方便地进行管理和使用

注意:没有提交到git的本地文件不会受到git提交历史的影响

  • git下载仓库:git clone 仓库地址 本地仓库名(不加本地仓库名拉取下来的项目所在文件夹默认使用远程仓库名,拉取项目的命令都可以通过该方式添加本地文件名)
  • 在Git仓库的任意位置打开终端都可以使用Git命令,不用必须在Git仓库的根目录下打开终端操作

git下载仓库分支:

  1. git clone -b 分支名 仓库地址 该操作会把仓库对应的所有分支拉下来自动切换到分支名对应的分支
  2. git clone --single-branch --branch/-b 分支名 git远程仓库地址 该操作只会拉下仓库中对应分支名的分支,拉取速度更快
  3. git clone --depth 1 远程仓库链接 拉取对应仓库对应深度的commit,depth=1为最新一次commit代码
  4. git clone 仓库地址 --recursive 该操作可以clone仓库中包含的其他git仓库

以上为git安装和链接的问题,接下来解决gitlab上传问题

需要上传时,首先要将上传文件所在的文件夹变为一个Git仓库,在该文件夹下git init,.git文件夹所在目录为git管理文件的根目录,根目录上一级的文件不参与管理

然后需要与远程的仓库建立连接,使用git remote add 链接的库的名字(自己决定叫什么) 库的网址(用https开头的更好)

git config --local -e 可修改自己过去建立的git的配置

git fetch 链接的库的名字 可以获得远程库的所有分支保存在自己本地下

git fetch 链接的库的名字 分支名 可以获得对应的分支保存在自己本地

git fetch 链接库的名字 远程分支名:本地分支名 可以获得远程分支并在自己本地更换名字

git remote 可查看自己已经链接的远程库

git remote -v 可查看已连接的远程库地址

git remote rm 连接的库名 可删除自己过去连接的库

git add 文件名(.表示该文件夹下所有文件),文件被添加到本地仓库

git commit -m “上面添加的文件的说明”

git reflog 可以查看Git仓库中所有的引用历史,包括分支和标签等,历史从上到下,由新到旧

git branch 可查看本地分支 git branch -a 可查看本地与远程分支
git branch -d 分支名 可以删除现有分支(需要先切换到别的分支)
git branch -vv 可以快速查看当前所在分支与远程仓库分支的关系

git push -u 远程库的名称 本地分支名:远程分支名 如:git push -u origin master:main(该方法可建立新分支)
git pull 远程库的名称 远程分支名:本地分支名 如:git pull origin master(远程库分支):master(本地分支)
git pull 会将本地的分支拉取到最新,如果是远程仓库才有的分支也会被拉取到本地,通过git branch -a可以查看到远程分支,通过git checkout origin/分支名可以访问对应的远程分支内容,也可以使用git merge的方法将本地分支和远程分支融合

如果在merge分支的时候出现fatal: refusing to merge unrelated histories:
git merge 库中对应的分支 --allow-unrelated-histories,既可以融合本地分支:本地分支名,也可以融合远程分支:远程库/分支名,在融合远程分支时建议先通过git pull 远程库将远程代码更新到最新
如果想要终止当前merge,使用:
git merge --abort

修改完本地git后需要用git commit -m ""才能把更新的东西push到分支上
git rm 文件名 会同时删除暂存区和工作区文件
git rm --cached 文件名 删除暂存区但保留工作区文件
git diff --cached --name-only 可以查看当前暂存区中已暂存的文件名


如何拉取项目最新的代码同时保存自己本地的修改不被覆盖:
git pull 远程仓库名 拉取最新的项目代码,将远程仓库的更改更新到本地仓库,如果产生冲突需要手动解决冲突,如果存在文件会被覆盖拉取会被终止
如果完全不希望本地之前的修改被覆盖:

  1. 在git pull 远程仓库名 前将修改提交并推送到远程仓库
  2. 使用git stash将本地修改临时储存(推荐使用该方法,有助于备份避免预料之外的更改)

如何删除过去commit的历史,提交一个全新分支:
git checkout --orphan 分支名 基于当前所在分支新建一个赤裸裸的分支,没有任何的提交历史,这时git branch还查询不到当前的branch分支
git rm --cached -rf . 移除当前暂存区的所有文件(因为在进入新分支时暂存区还有过去提交的文件)
git add 文件/文件夹 添加需要上传的文件或者文件夹
git commit -m “描述信息” 提交commit,这时git branch可以看到当前当前的新分支
git push -f 注意log信息发生了改变,在push到远程仓库时看是否使用-f命令对分支历史进行覆盖或者新建一个分支

git add . 监控工作区,将工作时所有的变化提交到暂存区,包括文件内容修改以及新文件,但不包括已删除的文件
git add -u 监控已经被add的文件,将被修改或删除的文件提交到暂存区,不会提交新文件
git add -A 上面两个功能的集合(在提交全新分支时使用这个)

git commit -m 提交已追踪的文件,如果文件更新未t通过git add提交到暂存区,则修改不能被提交
git commit -am 可以省略git add这步,直接提交已跟踪文件的修改(在提交全新分支时使用这个)

git branch -d 分支名 在删除分支前检查merge状态,未合并则删除失败
git branch -D 分支名 未合并也直接删除(提交全新分支时使用这个)

git branch -m master 为当前分支重命名

git push -f origin master 强制更新存储库


git查看暂存区文件:
git ls-files 查看暂存区中所有文件信息
可以在git ls-files添加后缀:
–cached(-c) 显示暂存区中文件(git ls-files默认使用的后缀)
–deleted(-d) 显示删除的文件
–modified(-m) 显式修改过的文件
–other(-o) 显示没有被git跟踪的文件(新添加的文件)
–stage(-s) 显示mode以及所有文件对应的Blob对象,我们可以获取暂存区中文件内容
如何通过Blob查看暂存区文件:
git ls-files -s – 查询文件名 或者直接git ls-files -s查看所有文件对应Blob对象
git cat-files -p 文件对应的哈希值前六位


fork了别人的代码,如何拉取别人最新的代码更新到自己的本地:
git pull 别人代码的git地址
git push 自己fork仓库的git地址


如何使用git去merge分支:
注:git pull相当于git fetch与git merge的融合,分成两步执行更加保险

  1. 开发分支dev合并到mater分支:
    git checkout dev 切换到开发分支
    git pull 把别人的最新代码拉取到本地,以不影响别人的代码
    git checkout master 要merge到拿个分支就到哪个分支
    git merge dev 合并分支
    git push -u origin master 推到对应分支
  2. master分支变化更新到dev:
    git checkout master
    git pull
    git checkout dev
    git merge master
    git push -u origin dev
  3. 如果是把两个有工程的分支merge到一起:
    git checkout dev 为了merge的暂存分支
    git pull 代码拉到最新
    git checkout 想要merge的分支
    git pull 代码拉到最新
    git checkout dev
    git merge 想要merge的分支
    git status 查看merge过程中出现的文件冲突(文件冲突可以在vscode等IDE中解决)
    git diff 可以查看冲突文件中冲突的位置和内容
    git add 解决冲突后的文件 解决冲突后重新add一下文件
    git commit -m “merge 分支1&分支2”
    git push -u 远程库 本地分支:远程分支 推到远程库
  4. 如果想要通过merge的方式复制分支,git merge 分支可能会由于过去的commit历史导致不能完全复制,因此可以采用:
    git checkout 想要复制到的分支
    git checkout 想要复制的分支 --(双横线) 文件夹/文件/.(全部文件)
  5. 如果切换到了commit历史分支并在上面进行了修改和提交,那么在切换分支时git会提醒你生成了一个新的分支并给出了分支哈希值,通过:git branch 新分支名 哈希值 可以保存该修改分支,后续可以与其他分支merge后删除

git的不同分支对应着不同文件,通过git checkout 本地分支名 可以把本地文件切换成对应分支的文件
在某个分支下修改了文件但是不想提交,想checkout到别的分支:
git stash 将未提交的修改隐藏
git stash save “说明信息”
git checkout 想去的分支
如果要恢复之前存储的内容:
git stash list 查看过去保存的节点
git stash apply (如果有多个stash,需要恢复指定的stash,在命令尾部添加id如stash@{0}),使用该命令前确保仓库中没有未提交的修改才能恢复
如果要删除之前存储的内容:
git stash drop 对应id
git stash pop 恢复的同时把stash存储列表的内容也删除了


使用git管理自己多个版本的代码:(注意对应Github上每个远程分支最好都需要一个本地分支与之对应,便于后续的维护和修改,可以使用git branch或是git checkout -b建立新分支)

  • 如果一个项目需要新开发代码并保存当前工作:
    git branch 分支名 建立一个新的本地分支用于保存工作,可以直接复制当前所在分支到该新分支
    git checkout 对应的分支名
    git merge 想要拷贝的分支 把拷贝分支的工作复制到新分支保存进度
    如果需要删除指定的分支: git branch -d 对应的分支名
    如果需要强行删除指定的分支:git branch -D 对应的分支名
    如果需要重命名分支:git branch -m 新分支名 将当前分支重命名
  • 如果想要回到过去保存的分支进行需要的操作:(不建议在过去的分支进行大规模修改)
    git log 查看提交的分支历史
    git checkout 分支对应的哈希值 回到对应的分支
    git checkout -b 新的分支名 将该分支拷贝到一个新分支便于后续操作(合并或删除),避免直接修改原分支

git pull和git pull --rebase的区别:
git pull 命令默认包含了一个 --merge 参数,因此二者的区别其实就是 merge 和 rebase 的区别
git pull需要解决与之前版本的代码产生的冲突,产生一个merge后的commit,而git pull --rebase在解决了冲突后不会产生一个merge的commit
命令:

  1. git pull --rebase 拉取最新项目
  2. 如果没有产生冲突不需要解决,如果产生冲突需要解决相应的冲突,解决完之后add解决完冲突的文件
  3. git rebase --continue 继续进行拉取
  4. git rebase --abort 如果不想继续拉取恢复到拉取前的状态

如何回退到过去的commit版本:(版本号对应代号的前六位)
git log 可以查看过去commit的信息

  • git reset --mixed 版本号 只保留源码,回退commit和index信息
  • git reset --soft 版本号 只回退commit信息,本地的源码能够正常保存,用于想要撤回过去提交的commit,如本次提交错误,则可返回本次提交的上一个版本
  • git reset --hard 版本号 彻底回退到某个版本,本地源码也会变成莫个版本的内容

如果不想在git add的时候添加某些文件,可以在.git所在文件夹创建一个.gitignore文件进行管理,把相应的文件或者文件夹名称放入该文件,如果文件夹或文件过去已经在项目中,可以git rm --cached 文件名删除后重新上传,对应的文件或文件夹不会上传;如果想要不添加所有同名称的文件夹如A,可以在.gitignore添加A/ (A这个文件夹不会被添加其中),如果工作区中有多个同名文件夹A但是只想要不添加其中一个,可以使用从.git所在路径下的相对路径添加A,如xxx/xxx/A/
如果想要保留A文件夹但是不将文件夹内的文件添加到暂存区:

  1. 可以先在.gitignore中添加对应的文件夹路径,如xx/A/*,不保存该文件夹内所有文件
  2. 再在该文件夹目录下创建.gitkeep,因为git无法索引到空文件夹
  3. 再在.gitignore中添加!xx/A/.gitkeep,即可索引到该不包含除.gitkeep以外文件的文件夹

如果项目中多个文件夹内存在多个.gitignore,那么自动取并集


如何修改最近一次的commit说明:
git commit --amend 可以修改最近一次的commit说明,注意修改完之后,之前commit后加到暂存区的文件也会一并提交
使用git误删除本地仓库文件:
git log ./
查看最近的commit,选择需要恢复到的时间,复制commit后面的值,执行git checkout 对应的值


如何合并commit一起提交:

  1. 使用git log命令查看当前分支的提交历史,确定要合并的提交的ID
  2. git rebase -i HEAD~n 合并最近的n次提交
  3. 在跳出的文本编辑器中将对应的历史提交前的pick更改为squash或fixup,squash命令将提交合并到前一个提交中,fixup命令将其合并到前一个提交中,但不包括提交说明,从上往下对应的commit历史从旧到新,如果需要将下面/新的commit合入上面/旧的commit,则将下面的commit的pick修改为squash或fixup,然后ctrl+x保存退出,注意这个操作是把新的提交合并到旧的提交中去,相当于给旧的提交打补丁
  4. 3后会跳出合并提交的提交说明,注意最上面的commit是在github网页上直接显示的,多次的commit如果修改在提交后commit对应的是多行,顺序是旧的commit最前,新的commit最后,可以自己手动修改把所有commit放到一行,编辑之后ctrl+x保存退出
  5. 如果不想保存当前的合并,可以Ctrl+X退出后执行git rebase --abort恢复到rebase之前的状态
  6. git log 可以查看到合并情况
  7. git push -f 可以强行推到指定分支

如何把git的历史版本推到github上:
git checkout 对应版本的编号前6位
git add . (这句可能不需要也能执行,因为已有历史信息)
git commit -m “说明” (这句可能不需要也能执行,因为已有历史信息)
git push -u 链接的仓库名 前6位编号:/refs/heads/分支名(开一个新分支) or git push -u 链接的仓库名 对应版本编号前6位:远程分支名(可以在原有分支上修改)
git checkout 原分支 最后回到原分支


如何使用github的Pull requests功能提交分支融合申请:

  1. 在仓库创建一个自己的分支,提交自己的文件
  2. 在仓库页面点击[Pull requests],然后点击[New pull requests]
  3. 确保比较的基础分支是融合后的分支,对比分支是自己新建立的分支,点击[Create pull request]
  4. git会自动比较两个分支,如果确定无误可以点击[Create pull request]提交pull request
  5. 被请求融合的分支维护者审核并接受pull request后上传的新文件会被合并到主分支中

如果出现每次提交/拉取需要再次输入密码

执行 git config --global credential.helper store,下次输入账号密码后后续不用再输入


问题:

  1. refusing to allow a Personal Access Token to create or update workflow .github/workflows/extra_sys.yml without workflow scope

要解决这个问题,您需要为您的个人访问令牌添加workflow权限。具体操作步骤如下:

  1. 打开 GitHub 页面,点击右上角的个人头像,然后选择Settings。
  2. 在左侧菜单中选择Developer settings,然后选择Personal access tokens。
  3. 找到您要使用的个人访问令牌,然后点击其名称。
  4. 在Token scopes下找到workflow,然后勾选它。
  5. 点击页面底部的Update token按钮,保存您的更改。
    现在,您的个人访问令牌就有了workflow权限,可以创建或更新.github/workflows/extra_sys.yml工作流了。
  1. git clone远程仓库时报错fetch-pack: unexpected disconnect while reading sideband packet; fatal: early EOF; fatal: fetch-pack: invalid index-pack output,这是由于仓库太大clone太深,可以使用下面的命令解决:

git clone --depth 1 远程仓库链接

  1. 如果上传代码时出现fatal: did not receive expected object,可以删除当前的.git文件夹重新git init仓库解决
  2. git clone 远程仓库https链接报错:fetch-pack: unexpected disconnect while reading sideband packet,可以使用远程仓库的ssh链接进行clone
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值