《Git-使用与配置》

文章目录


前言:

git是分为三部分,一部分是你自己的文件,另外一个是缓存区,最后一个是本地库。当你修改了自己的文件后,你会git add
xx将修改保存到缓存区,然后再用commit推送修改到本地库中。 git push 将本地仓库修改推送到服务器上的仓库中 commit
是将本地修改保存到本地仓库中

一、在线文档

[官方文档]:https://git-scm.com/docs

[中文文档]:https://git-scm.com/book/zh/v2

二、公钥管理

1、公钥管理

[gitee地址]:https://gitee.com/help/articles/4180

2、生成/添加SSH公钥

[gitee地址]:https://gitee.com/help/articles/4181
[github地址]:https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

ssh-keygen -t ed25519 -C "your_email@example.com"

[gitlab]:

ssh-keygen -o -t rsa -C "your.email@example.com" -b 4096

查看获取

cat ~/.ssh/id_rsa.pub

重要一环,如下图:
在这里插入图片描述

3、Git配置多个SSH-Key

[gitee地址]:https://gitee.com/help/articles/4229

4、如何在码云上使用 GPG

[gitee地址]:https://gitee.com/help/articles/4248

三、用户配置

1、设置用户名

$ git config --global user.name “yourname”

2、设置用户邮箱

$ git config --global user.email myemail@qq.com

3、查看git设置列表信息

$ git config --list

4、查看用户名

$ git config user.name

四、.gitignore、.gitattribute 文件作用

gitignore 用于忽略你不想提交到Git上的文件

.gitattribute 指定非文本文件的对比合并方式

.gitigonre 你想要忽略的文件或者目录

/mtk/ 过滤整个文件夹

*.zip 过滤所有.zip文件

/mtk/do.c 过滤某个具体文件

.gitattribute 用于设置文件的对比方式(常用非文本文件)

五、Git常用命令

start a working area (see also: git help tutorial)
   clone     Clone a repository into a new directory
   init      Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add       Add file contents to the index
   mv        Move or rename a file, a directory, or a symlink
   restore   Restore working tree files
   rm        Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect    Use binary search to find the commit that introduced a bug
   diff      Show changes between commits, commit and working tree, etc
   grep      Print lines matching a pattern
   log       Show commit logs
   show      Show various types of objects
   status    Show the working tree status

grow, mark and tweak your common history
   branch    List, create, or delete branches
   commit    Record changes to the repository
   merge     Join two or more development histories together
   rebase    Reapply commits on top of another base tip
   reset     Reset current HEAD to the specified state
   switch    Switch branches
   tag       Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch     Download objects and refs from another repository
   pull      Fetch from and integrate with another repository or a local branch
   push      Update remote refs along with associated objects

5-1、git clone 克隆仓库

1.git clone 不指定分支克隆
  • 创建初始文件夹,切换当前文件目录克隆
mkdir  tmall-service
cd  tmall-service
git clone  http://10.1.1.11/service/tmall-service.git 
  • 指定默认目录:git clone [仓库地址] [本地目录]
 git clone  http://10.1.1.11/service/tmall-service.git  tmall-service
2.git clone 克隆指定分支
  • git clone -b [分支名] [仓库地址]
 git clone -b dev http://10.1.1.11/service/tmall-service.git

PS: 克隆某分支到本地目录,然后在该目录下push时,对应的就是push到远端的对应分支

5-2、git init 初始化仓库

初始化项目到github、gitee、gitLab

1.未初始化仓库
  • 在github、gitee或gitLab新建一个仓库
  • 首先进入项目目录,然后初始化一个Git仓库
cd xxx/test
git init
  • 添加当前仓库的所有改动
 git add .
  • 提交当前仓库的所有改动
 git commit -m "init"  // 参数-m后为当次提交的备注信息
  • 推送当前仓库的所有改动
git remote add origin https://gitee.com/xxx/test.git
git push -u origin master
2.已初始化仓库
  • 下载github、gitee或gitLab仓库的代码到本地
  • 首先把项目中的代码拷贝到仓库对应的本地目录中
  • 添加当前仓库的所有改动
 git add .
  • 提交当前仓库的所有改动
 git commit -m "init"  // 参数-m后为当次提交的备注信息
  • 推送当前仓库的所有改动
git push 

5-3、git add 提交暂存区

git add [参数] <路径> 作用就是将我们需要提交的代码从工作区添加到暂存区,就是告诉git系统,我们要提交哪些文件,之后就可以使用git commit命令进行提交了。
 为了方便下面都用 . 来标识路径, . 表示当前目录,路径可以修改,下列操作的作用范围都在版本库之内。

1.git add .

他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。

2. git add -u

他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)

3.git add -A

是上面两个功能的合集(git add --all的缩写)

PS:

  • git add -A 提交所有变化
  • git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
  • git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件

git版本不同会有所区别:

Git Version 1.x:
在这里插入图片描述
Git Version 2.x:
在这里插入图片描述

5-4、git commit 提交更新

git commit 主要是将暂存区里的改动提交到本地的版本库。每次使用git commit 命令我们都会在本地版本库生成一个40位的哈希值,这个哈希值也叫commit-id。

commit-id在版本回退的时候是非常有用的,它相当于一个快照,可以在未来的任何时候通过与git reset的组合命令回到这里。

1. git commit -m “message”

-m 参数表示可以直接输入后面的message,如果不加 -m 参数,那么是不能直接输入message的,而是会调用一个编辑器一般是vim来让你输入这个message。

当我们想要提交的message很长或者我们想描述的更清楚更简洁明了一点,我们可以使用这样的格式:
在这里插入图片描述

2. git commit -a -m “message”

-a 参数表示,可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过git add添加到暂存区。

注意,新加的文件(即没有被git系统管理的文件)是不能被提交到本地仓库的。建议一般不要使用-a 参数,正常的提交还是使用git add先将要改动的文件添加到暂存区,再用git commit 提交到本地版本库。
在这里插入图片描述

3. git commit --amend

git commit --amend 也叫追加提交,它可以在不增加一个新的commit-id的情况下将新修改的代码追加到前一次的commit-id中。

1)假如现在版本库里最近的一版正是我们想要追加进去的那版,此时是最简单的,直接修改工作区代码,然后git add,之后就可以直接进行git push到服务器,中间不需要进行其他的操作如git pull等。

2)如果现在版本库里最近的一版不是我们想要追加进去的那版,那么此时我们需要将版本库里的版本回退到我们想要追加的那一版。

  2.1> 第一种,如果我们知道我们需要的版本与现在最近的版本中间隔着 n 个提交,那么我们可以直接使用git reset --hard HEAD~n 命令,执行完后运行git log -1 命令我们会发现现在版本库里最近的一版就是我们需要的那版,此时再在工作区直接修改代码,改完之后进行git add,再执行本git commit --amend命令,之后git push。

  2.2> 第二种,如果我们不知道我们需要的版本与现在最近的版本中间隔着 n 个提交,那么我们可以使用git log来查看版本库中的commit-id,找到我们需要的commit-id后,在终端中执行git reset --hard commit-id,执行完后运行git log -1 命令我们会发现现在版本库里最近的一版就是我们需要的那版,此时再在工作区直接修改代码,改完之后进行git add,再执行本git commit --amend命令,之后git push。

5-5、git push 推送远程

在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了,如果不清楚版本库的构成,可以查看我的另一篇,git 仓库的基本结构。
git push的一般形式为 git push <远程主机名> <本地分支名> <远程分支名> ,例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名。第一个master是本地分支名,第二个master是远程分支名。

1.git push origin master

如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建

2.git push origin :refs/for/master

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin –delete master

3.git push origin

如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支

4.git push

如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名

PS:
关于 refs/for:
refs/for 的意义在于我们提交代码到服务器之后是需要经过code review 之后才能进行merge的,而refs/heads 不需要

5-6、git fetch & pull 区别与使用

Git fetch & pull 详解

在这里插入图片描述

5-7、git merge & rebase 区别与使用

[git]merge和rebase的区别

1.git merge 合并分支

合并前要先切回要并入的分支
以下表示要把dev分支合并入master分支

$: git checkout master
$: git merge dev
Merge made by recursive.
 README |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

5-8、git branch 分支查看

1.查看本地分支
$ git branch
* master
2.查看远程分支
$ git branch -r
  origin/HEAD -> origin/master
  origin/dev
  origin/master
3.查看所有分支
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/test
  remotes/origin/master

PS: git branch -r 无法获取远程分支,ui可以看见分支但是git 命令无法查看
原因 git branch -a 这条命令并没有每一次都从远程更新仓库信息,我们可以手动更新一下

git fetch origin 
git branch -a

5-9、git checkout 切换分支

1.git checkout -b [本地分支] origin/[远程分支]
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master

$ git checkout -b mydev origin/dev
Branch mydev set up to track remote branch Release from origin.
Switched to a new branch 'mydev'

PS: 作用是checkout远程的dev分支,在本地起名为mydev分支,并切换到本地的mydev分支

问题
Switched to a new branch 'mydev ’
Branch 'mydev ’ set up to track remote branch 'dev ’ from ‘origin’.
切换到新的分支“mydev ”
分支“mydev ”设置为从“源”跟踪远程分支“dev”。

解决方案

git branch --set-upstream-to=origin/dev mydev  -- 将上游设置为 dev
2.git checkout -b [本地分支]
  • 新建本地分支
git checkout -b mydev
  • 推送本地分支到远端
git push origin mydev:dev
  • 设置上游分支为源点
git branch --set-upstream-to=origin/dev mydev  

5-10、git reset 撤消提交

1.撤消上一次commit的内容(该操作会彻底回退到某个版本,本地的源码也会变为上一个版本的内容)
git reset --hard <commit-id>

以下表示要撤消“update build gradle configuration file”这一次的commit id,返回到"add battery settings ui"这一次的commit id,

$ git log
commit c8303a9e8db2bcf4edb7488e722a380f4e8858ec (HEAD)
Author: abc <abc@163.com>
Date:   Sat Oct 28 09:28:51 2017 +0800

    update build gradle configuration file

    Change-Id: I9ee532fd0d4698613698a64eb754fb98a8559e32

commit 8d8e5ccf24cf6836ab780aa3860270c3876e825a
Author:  abc <abc@163.com>
Date:   Sat Oct 28 09:02:01 2017 +0800

    add battery settigns ui

    Change-Id: Ia907ee4e84f54c00a186d31378a7925a6adaba0e

$ git reset --hard 8d8e5ccf24cf6836ab780aa3860270c3876e825a
HEAD is now at 8d8e5cc add battery settigns ui

$ git log
commit 8d8e5ccf24cf6836ab780aa3860270c3876e825a (HEAD)
Author:  abc <abc@163.com>
Date:   Sat Oct 28 09:02:01 2017 +0800

    add battery settigns ui

    Change-Id: Ia907ee4e84f54c00a186d31378a7925a6adaba0e

5-11、git push 删除分支

1.git push origin :[远端分支]
  • 删除远端dev分支,推送一个空分支到远程分支,其实就相当于删除远程分支
 git push origin  :dev
2.git push [仓库名] [本地分支名]:[远程分支]
  • 删除指定的远程分支
git push origin --delete dev

5-12、git log 日志查看

 git log --pretty=oneline  model/BIZ/SPD/Stock/logic/code/dsrc/Stock.java
 git show 提交id

5-13、 添加或指定远程仓库地址

git remote set-url origin "https://..."
git config remote.origin.url "https://..."
git remote rm origin-删除

5-14、仓库名称与当前文件夹名称相同

git init
git remote add origin git@github.com:***.git
git pull --rebase origin master
git branch --set-upstream-to=origin/master master
git pull

5-15、git stash

git stash指定文件

git stash push temp.c
git stash -- temp.c
git stash push -m "test" temp.c

# 指定说明信息并stash所有java文件的修改
$ git stash push -m "this is a partly stash test" **/*.java

git stash 解决冲突

1、git pull  //提示冲突后
2、git stash //放暂存区
3、git pull //成功拉下代码
4、git stash pop //将暂存区的代码还原,会提示代码冲突,解决冲突代码的文件
5、git add .  //重新提交一次
6、git commit -m "冲突"
7、git push  

5-16、git show

1.查看最后一次提交记录的修改文件信息

 git show --raw

2.查看指定commit id对应修改文件列表

git show --raw commit_id

git show --raw 2f80f1c8bb2cb8e91d22ad38480b681c194f6518

5-17、git fetch强制覆盖本地分支

git 远程分支强制覆盖本地分支–放弃本地修改

git fetch --all  
git reset --hard origin/master 
git pull

备注:
git fetch 只是下载远程的库的内容,不做任何的合并
git reset 把HEAD指向刚刚下载的最新的版本

六、简单的代码提交流程

git status 查看工作区代码相对于暂存区的差别
git add . 将当前目录下修改的所有代码从工作区添加到暂存区 . 代表当前目录
git commit -m ‘注释’ 将缓存区内容添加到本地仓库
git pull origin master先将远程仓库master中的信息同步到本地仓库master中
git push origin master 将本地版本库推送到远程服务器,
origin是远程主机,master表示是远程服务器上的master分支和本地分支重名的简写,分支名是可以修改的
在这里插入图片描述

七、Git常见问题解决

1、Git-remote Incorrect username or password ( access token )

$ git clone https://gitee.com/***.git
Cloning into '***'...
remote: ***@163.com: Incorrect username or password (access token)
fatal: Authentication failed for 'https://gitee.com/***.git/'

解决办法:清除本地的gitee用户名和密码

git config --system --unset credential.helper

2、git clone 克隆或下载一个仓库单个文件夹

地址:https://www.cnblogs.com/zhoudaxiaa/p/8670481.html

1、如果是想克隆别人的项目或者自己的 很简单的一个网站就解决了。DownGit: 只需要找到仓库中对应文件夹的url,输入之后,点击 download 自动打包下载:

(这里说明一下,因为原作者的项目无法使用,这是我修改过的新项目吧,把资源链接改到了国内CDN,所以访问速度很快!)

2、克隆自己的项目 注意:本方法会下载整个项目,但是,最后出现在本地项目文件下里只有需要的那个文件夹存在。类似先下载,再过滤。

有时候因为需要我们只想gitclone 下仓库的单个或多个文件夹,而不是全部的仓库内容,这样就很省事,所以下面就开始教程啦

在Git1.7.0以前,这无法实现,但是幸运的是在Git1.7.0以后加入了Sparse Checkout模式,这使得Check
Out指定文件或者文件夹成为可能。

举个例子:

现在有一个test仓库https://github.com/mygithub/test 你要gitclone里面的tt子目录:
在本地的硬盘位置打开Git Bash

git init test && cd test     //新建仓库并进入文件夹
git config core.sparsecheckout true //设置允许克隆子目录

echo 'tt*' >> .git/info/sparse-checkout //设置要克隆的仓库的子目录路径   //空格别漏

git remote add origin git@github.com:mygithub/test.git  //这里换成你要克隆的项目和库

git pull origin master    //下载

3、git push大文件处理方法

地址:https://www.jianshu.com/p/f4f34c67707a

4、git pull 时每次都要输入用户名和密码的解决办法

在使用https git拉取代码时,每次git pull的时候都会让输入用户名和密码

1.进入项目目录

git config --global credential.helper store

然后会生成一个本地文件用于记录用户名和密码,这个文件我们无需关心

再次git pull一下,会让输入用户名和密码。这次输入之后以后就不会每次输入了。 如果要清除用户名和密码

2.运行一下命令缓存输入的用户名和密码

git config --global credential.helper wincred

3.清除掉缓存在git中的用户名和密码

git credential-manager uninstall

4.warning: LF will be replaced by CRLF in 解决办法
原因是需要提交的文件是在windows下生成的,windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现提示,解决办法:

git config --global core.autocrlf false

再执行git 提交

5.码云 remote: error: GE007: Your push would publish a private email address.

5、git status 查看中文乱码问题

第一步
打开你的终端,依次输入以下命令:

$ git config --global core.quotepath false # 设置 git status utf-8编码

$ git config --global gui.encoding utf-8 # 设置Git GUI界面utf-8编码

$ git config --global i18n.commit.encoding utf-8 #设置commit信息utf-8编码

$ git config --global i18n.logoutputencoding utf-8 # 设置输出 log utf-8 编码

第二步
新建系统环境变量 LESSCHARSET并赋值为utf-8。
在这里插入图片描述
以上两步完成后,注销电脑重新进入即可。

解决 Git 在 windows 下中文乱码的问题:https://zhuanlan.zhihu.com/p/357002483

6、添加超出范围100M文件

用这个代码找到100m以上的文件

find ./ -size +100M

将打文件加入git large file storage

git lfs track "name_of_a_giant_file"
#example:
#git lfs track "fc6_W.csv"

加入track之后可以把想要保存的打文件添加到git上

git add path_of_a_giant_file
#example:
#git add vgg16_weight/fc6_W.csv

最后进行提交和推送

git commit -m "Add design file"
git push origin master

7、git status中文文件名编码问题解决

git config --global core.quotepath false

8、Java中解决编译 target 文件夹被版本控制

git rm -r --cached ./project-java/target
git  add .
git commit -m 'add target to .gitignore file'
git push

git分支开发的原理:
https://blog.csdn.net/weixin_37861326/article/details/80097198

git——更新分支、提交代码、切换分支、合并分支:
https://www.cnblogs.com/gaoquanquan/p/9501981.html

git从已有分支拉新分支开发:
https://www.cnblogs.com/lingear/p/6062093.html

git clone 指定的单个目录或文件夹:
https://www.cnblogs.com/xkus/p/9692842.html

Git克隆部分文件:
https://www.cnblogs.com/xilifeng/p/5225666.html

Git基础-本地切换分支时被拒绝:
https://blog.csdn.net/qq_39505245/article/details/120066967

9、遇到ssh: connect to host github.com port 22: Connection refused的解决办法

$ git pull
ssh: connect to host github.com port 22: Connection timed out
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

$ ssh -vT git@github.com
OpenSSH_8.8p1, OpenSSL 1.1.1l  24 Aug 2021
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to github.com [182.43.124.6] port 22.

debug1: connect to address 182.43.124.6 port 22: Connection timed out
debug1: Connecting to github.com [::] port 22.
debug1: connect to address :: port 22: Connection refused
ssh: connect to host github.com port 22: Connection refused

解决:https://zhuanlan.zhihu.com/p/544864281

hosts文件

# Github
140.82.113.4 github.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
git-svn 是一个桥接工具,用于在 Git 和 Subversion (SVN) 之间进行转换和交互。下面是 git-svn 的安装配置过程。 安装 Git: 1. 在官网 (https://git-scm.com/downloads) 上下载适合你操作系统的 Git 安装程序。 2. 打开安装程序并按照指示进行安装。 3. 验证安装是否成功,在命令提示符或终端上运行 "git --version" 命令,如果出现 Git 的版本号信息,则说明安装成功。 配置 Git: 1. 打开命令提示符或终端,并运行以下命令来配置你的 Git 用户名和邮箱: ``` git config --global user.name "你的用户名" git config --global user.email "你的邮箱地址" ``` 安装 Git-svn 桥接工具: 1. 在命令提示符或终端上运行以下命令安装 Git-svn: - 在 Ubuntu 上使用 apt-get: ``` sudo apt-get install git-svn ``` - 在 macOS 上使用 Homebrew: ``` brew install git-svn ``` - 在 Windows 上使用 Scoop: ``` scoop install git-svn ``` 配置 Git-svn: 1. 在命令提示符或终端上运行以下命令配置 Git-svn: ``` git svn init [SVN 仓库 URL] -s ``` 2. 这将为你的 Git 仓库创建一个指向 SVN 仓库的远程“refs/remotes/origin/trunk”引用。 3. 运行以下命令来下载远程 SVN 仓库的历史记录: ``` git svn fetch ``` 4. 这将下载远程 SVN 仓库的历史记录到你的本地 Git 仓库。 5. 当你想要提交更改时,使用 Git 的命令,例如 "git add"、"git commit"等来管理更改,并使用以下命令将更改推送到 SVN 仓库: ``` git svn dcommit ``` 以上是 git-svn 的安装配置过程。-git提供了更快速、灵活、分布式的版本控制系统,而git-svn桥接工具则使得想要在 git 和 Subversion (SVN)之间进行转换和交互的用户能够灵活使用两种工具。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小霸王_30037863

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值