git手册

git使用介绍

基本工作流

echo "# mcms" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/2217092594/mcms.git
git push -u origin main

git community book 中文版

GIT对象模型:

所有用来表示项目历史信息的文件都是通过40-digit长度的SHA1值来做为对象名类似下面这样

6ff87c4664981e4397625791c8ea3bbb5f2279a3

对象

每个对象(object) 包括三个部分:类型大小内容。大小就是指内容的大小,内容取决于对象的类型,有四种类型的对象:"blob"、"tree"、 "commit" 和"tag"。

  • “blob”用来存储文件数据,通常是一个文件。

  • “tree”有点像一个目录,它管理一些“tree”或是 “blob”(就像文件和子目录)

  • 一个“commit”只指向一个"tree",它用来标记项目某一个特定时间点的状态。它包括一些关于时间点的元数据,如时间戳、最近一次提交的作者、指向上次提交(commits)的指针等等。

  • 一个“tag”是来标记某一个提交(commit) 的方法。

几乎所有的Git功能都是使用这四个简单的对象类型来完成的。它就像是在你本机的文件系统之上构建一个小的文件系统。

详情参照Git Book 中文版 - GIT对象模型

git目录与工作目录

Git目录

是为你的项目存储所有历史和元信息的目录 - 包括所有的对象(commits,trees,blobs,tags), 这些对象指向不同的分支.

git目录一般就指的根目录下的.git

$>tree -L 1
.
|-- HEAD         # 这个git项目当前处在哪个分支里
|-- config       # 项目的配置信息,git config命令会改动它
|-- description  # 项目的描述信息
|-- hooks/       # 系统默认钩子脚本目录
|-- index        # 索引文件
|-- logs/        # 各个refs的历史信息
|-- objects/     # Git本地仓库的所有对象 (commits, trees, blobs, tags)
`-- refs/        # 标识你项目里的每个分支指向了哪个提交(commit)

工作目录

Git的 '工作目录' 存储着你现在签出(checkout)来用来编辑的文件. 当你在项目的不同分支间切换时, 工作目录里的文件经常会被替换和删除. 所有历史信息都保存在 'Git目录'中 ; 工作目录只用来临时保存签出(checkout) 文件的地方, 你可以编辑工作目录的文件直到下次提交(commit)为止.

git安装

Git Book 中文版 - 安装Git

git日志

查看日志

git log 

查看分支是基于哪个分支checkout出来的

git log --graph

image-20220407093022651

其中每个点(高亮行)代表一次提交,每条线都是一次分支

回到某个提交点

git reflog 选择一个提交点,reflog可以显示七位版本号以及简略的信息

image-20220418201500121

git reset --hard (七位版本号)

image-20220418201537808

git配置与初始化

初始化

首先拿到一个项目是需要先初始话的,这个操作会创建一个.git的文件,里面就是暂存区。也就是add后的文件都在里面

git init

配置用户名和邮箱

使用Git的第一件事就是设置你的名字和email,这些就是你在提交commit时的签名。

$ git config --global user.name "Scott Chacon"
$ git config --global user.email "schacon@gmail.com"

这样的设置是全局设置,会影响此用户建立的每个项目.

执行了上面的命令后,会在你的主目录(home directory)建立一个叫 ~/.gitconfig 的文件. 内容一般像下面这样:

[user]
        name = Scott Chacon
        email = schacon@gmail.com

如果你想使项目里的某个值与前面的全局设置有区别(例如把私人邮箱地址改为工作邮箱);你可以在项目中使用git config 命令不带 --global 选项来设置. 这会在你项目目录下的 .git/config 文件增加一节[user]内容(如上所示).

查看用户名和邮箱

git config user.name
git config user.email

配置远程地址

配置远程地址

git remote add origin xxxxxxxx

查看远程地址

git remote -v

修改远程地址

git remote set-url origin xxxxx

git重命名文件

windows系统是个大小写不敏感的

所以重命名文件如果是需要改成大写的话,需要使用临时文件的方式更改

git mv readme.md temp&& git mv temp README.md

git mv相当于执行了下面三步

$ mv README.md README
$ git rm README.md
$ git add README

删除文件

git mv

如果只是在工作目录中删除文件。那么他将显示(Changes not staged for commit)“未暂存的更改”,下次提交时会显示删除了改文件。

使用git rm则不会显示,使用status不会显示未暂存的更改,改文件将消失并且不再跟踪,如果文件已经修改或者添加到了暂存区,那么必须使用-f选项强制删除

创建仓库:

git init

image-20220324001939850

正常工作流

git add .

将更改的内容或者新文件添加到索引中

git staus

使用上面的或者git diff --cached 查看哪些文件将被提交

On branch master
​
No commits yet
​
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   txt1.txt
        new file:   txt2.txt

image-20220324002638185

git commit

提交内容

git log

查看提交的信息,这里我的提交信息为test

image-20220324003343601

commit 2feb3c4a61506a1da5aa40ae740f58fd495fc8ec (HEAD -> master)
Author: dragonmax <2217092594@qq.com>
Date:   Thu Mar 24 00:27:09 2022 +0800
​
    test

克隆项目

首先要切换到想要存放项目的文件夹中

git clone 远程地址

image-20220515225628681

远程仓库操作

添加远程仓库

git remote add 远程仓库名 远程仓库地址

查看现有的远程仓库

git remote -v
origin  https://gitee.com/zxldragonmax/MCMS_1.git (fetch)
origin  https://gitee.com/zxldragonmax/MCMS_1.git (push)

更改远程仓库地址

git remote set-url 仓库名 新地址

删除远程仓库

git remote remove 远程仓库名

拉取远程仓库更新

fetch拉取的更新会自动生成一个新的分支,之后需要切换到主分支使用merge合并,也可以使用pull暴力拉取

git fetch 远程仓库名字

推送提交到远程

git push 远程名字 本地分支名

查看某个远程仓库

git remote show 远程名

重命名远程仓库

git remote rename 旧名字 新名字

移除远程仓库地址

git remote rm 仓库名

标签操作

打标签

git tag xxx

image-20220515233554371

列出标签

git tag
4.6.3
5.1
5.2.1
5.2.3
5.2.4
5.2.8

分支操作

git branch experimental

创建分支

git branch

创建experimental分支

git branch experimental

查看分支

*代表的就是当前所在的分支

  experimental
* master

image-20220324003707584

切换分支

git checkout experimental

切换到experimental分支,并且查看当前分支,可以发现* 已经到了当前分支experimental前面

image-20220324003945944

git add txt3.txt

git commit -a

在当前分支修改并提交

git log

查看信息

image-20220324005553456

git checkout master

git log

退回master查看信息

image-20220324005652901

合并分支merge

git merge experimental

合并“experimental”和“master”两个分支

image-20220324005955164

合并分支rebase

Git Book 中文版 - rebase

查看分支创建时间

git reflog show --date=iso branch name

图形化查看

gitk

会有一个漂亮的图形界面显示项目历史

image-20220324010348731

删除分支

这时你就可以删除掉你的 “experimental” 分支了(如果愿意):

git branch -d experimental

git branch -d只能删除那些已经被当前分支的合并的分支。如果你要强制删除某个分支的话就用git branch –D;

下面假设你要强制删除一个叫“crazy-idea”的分支:

git branch -D crazy-idea

保存工作现场

git stash

之后工作区就是干净的,这时候切换分支完成任务后再返回这个分支

git stash pop 恢复工作现场

可以多次保存工作现场,git stash list查看,git stash apply恢复,git stash drop

git使用代理

有时候需要从github推送拉取代码,这个但是国内的网络环境不太好,而且代理软件一般只在浏览器生效,使用git拉取github上的代码无法访问,如下

image-20230209101214770

这个时候就需要直接在git上配置代理,让git直接走代理访问github

设置代理

git config --global http.proxy 代理地址
git config --global https.proxy 代理地址

取消代理

git config --global --unset http.proxy
git config --global --unset https.proxy

查看当前已设置的代理

git config --global --get http.proxy
git config --global --get https.proxy

git永久记住密码

  1. 使用凭据管理器: Git还提供了一种更安全的方式来管理凭据,即使用凭据管理器。这种方式允许你将凭据保存在操作系统的钥匙链(Keychain)或其他安全存储中。

    • 在macOS上,可以使用osxkeychain来保存凭据:

      git config --global credential.helper osxkeychain
    • 在Windows上,可以使用manager-core来保存凭据:

      git config --global credential.helper manager-core
    • 在Linux上,可以使用libsecret来保存凭据:

      git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

无论你选择哪种方法,Git都将记住你的凭据,并在需要时自动提供它们。这样,你就不必每次都输入用户名和密码。

请注意,虽然这些方法可以方便地记住密码,但也可能会降低安全性。因此,在选择使用这些方法时,请确保你的系统和存储设备是安全的,并仔细考虑潜在的风险。

可能有的Linux发行版不能用libsecret 某些操作系统或环境可能会限制Git存储凭据的位置。例如,在某些Linux发行版中,安全策略可能阻止使用libsecret来保存凭据。请检查相关限制并尝试选择其他凭据存储选项。

如果以上方法都没有解决问题,你可以尝试手动配置凭据。在终端中运行以下命令来存储凭据:

git config --global credential.helper store

这将在.gitconfig文件中添加一个凭据存储配置。然后,当你第一次使用Git时,Git会要求你输入用户名和密码,并将它们保存在.git-credentials文件中。这样,以后就不需要再次输入凭据了。

真实场景

场景一:新入职(配置查看git信息)

背景:

你新入职一个公司,用的是以前用过的电脑,环境都已经配置好,你不想重装

首先查看git配置的用户名和密码(这个很重要)因为到你提交你的代码时,是以你配置的用户名和邮箱为提交人信息的,如果你没有改的话,后期管理就会多一些障碍。

查看用户名和邮箱

git config user.name
git config user.email

配置成你自己的

git config --global user.name "Your_username"
git config --global user.email "Your_email"

然后进入项目根目录下(如果需要的话),查看远程地址

git remote -v
​
origin  http://192.168.2.153:8070/parking/parking-station.git (fetch)
origin  http://192.168.2.153:8070/parking/parking-station.git (push)

查看当前分支

git branch

检查此项目的状态以及提交日志

git status
git log

场景二:拉取项目

场景三:fork项目后的操作

fork其实是gitee或者github的功能,并不是git原生的,fork操作会复制一份目标仓库(包括文件,提交历史,issues,和其余一些东西),复制后的仓库在你自己的GitHub帐号下,这个操作是在github服务器上完成的,和本地计算机的仓库没有关系。

提交代码到原仓库中

当你在托管平台上看到了一个很有趣的项目,想要自己去改进它,然后你 fork 了它(类似克隆),最后你改了一个很厉害的功能出来,想要推给原 fork 项目,这时候你可以 pull request,一旦对方接受了你的 pull request,你的代码就有可能会出现在原 fork 项目中了

拉去原仓库的新提交

当你fork的项目有了新的更新时,你想要把新的跟新也弄过来,操作如下:(github或者gitee上只需要点一下就可以)

首先把原项目地址加入到远程源中

 git remote add upstream <原仓库github地址>

拉取

git fetch upstream

fetch后会被存储在一个本地分支upstream/master上

合并

git merge upstream/master

场景四:拉取后直接开写,忘了分支,无法合并到别人的分支?

很多人都是直接拉取代码,开始一顿输出,忘了开自己的分支,更不会合并到别人的分支,这样的话就失去了git合作的意义

自己新开分支的话可以在提交前的任何时候新开分支的,要想合并到别人的分支需要先同步自己的分支内容后切换到别人的分支并拉取,再在这个分支中合并自己的分支代码,合并后推送到远程,如果想要将自己的分支也进行合并同步,需要切换到自己的分支做和之前相同的操作即可

现在将要自己新建的分支:zxl

别人的分支:new

新开自己的分支

git branch zxl

提交自己的分支内容并推送

git commit -b -m "xxxx"
git push

切换到别人分支

git checkout new

拉取一下

git pull

合并你的分支到别人的分支中

git merge zxl

推送到远程

git push

完成!

场景五:commit到了错误的分支上

首先切换到错误分支上

git checkout xxx

将上一次的提交转换为放回暂存区,并且取消上次提交

git reset HEAD~1

把暂存区的文件提交到暂存栈

git stash

切换到要提交的分支上

git checkout

恢复暂存栈的代码,如果有新添加的需要再执行次add

git stash pop

最后就是正常的提交代码步骤

  1. git pull // 先更新再提交

  2. git status // 查看当前状态

  3. git add . // 添加到暂存区

  4. git commit -m '提交注释'

  5. git push // 提交到远程

场景六,无法访问github

配置git代理

比如我用的clash,上面显示端口为 7890,

image-20230209101555513

而据我了解我这个代理不支持https,所以选择http

配置如下:

git config --global http.proxy localhost:7890

成功

场景七,master in xxxx has no tracked branch

这是因为没有绑定本地与远程之间的关系,因为使用代码进行推送的话,完整的推送代码如下

git push 远程分支名 本地分支名

但是我们平常点击idea的推送按钮是执行的git push,而这种默认是向绑定的分支上推送,全部由idea拉取创建的分支会由idea默认绑定

但是如果是通过命令拉取创建或者其他方式创建,是没有绑定的,所以git push是找不到默认分支,将会报如下错误:

image-20230221152946377

这个时候需要指定绑定关系,有两种方式

一,绑定到branch

1.git branch 既可以使用--set-upstream又可以使用--set-upstream-to,但是前者已经被弃用

用法:

git branch --set-upstream-to=origin/mybranch1 mybranch1

作用:追踪远程分支origin/mybranch1到本地分支mybranch1,如果远程没有mybranch1会报错,需要先创建远程分支

二,绑定到push上

2.git push只可以使用--set-upstream,等价与使用 -u

用法:

 git push -u origin mybranch1

作用:

1.推送本地分支mybranch1到远程主机origin的mybranch1分支

2.追踪远程分支,远程没有mybranch1就自动创建一个

3.设置origin为默认主机

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值