一、Git 安装配置

在Windows上安装Git。
安装包下载地址:https://gitforwindows.org 官网慢,可以用国内的镜像:https://npm.taobao.org/mirrors/git-for-windows

  • 查看用户信息

1、查看用户信息

git config --list 或者 git config -l // 查看所有配置
git config --global --list // 查看用户自己配置

gitlab java 获取用户所有提交_git


2、查看某个字段具体的信息

git config user.name
git config user.email

gitlab java 获取用户所有提交_git_02

  • 配置用户信息

配置个人的用户名称和电子邮件地址(对所有仓库有效):

git config --global user.name "liu"
git config --global user.email "1476212137@qq.com"

gitlab java 获取用户所有提交_版本库_03

没有报错说明修改成功,可以使用上面的查看用户信息命令进行查看。

gitlab java 获取用户所有提交_远程仓库_04


可以看到已经修改成功了。这里配置的用户名会在多人合作时用户进行提交时反映出来,提交记录中会显示你所配置的用户名。

二、Git 工作流程

工作原理:理解下面四个点很重要。

工作区 – 暂存区 – 本地仓库 – 远程仓库

gitlab java 获取用户所有提交_版本库_05


简单理解:

工作区:本地工作目录。

暂存区:已经被追踪到的文件的集合。

版本库:Git的版本库。

三、Git 创建仓库

1、使用当前目录作为仓库,目录中可以为空的或者有一些文件。

git init

gitlab java 获取用户所有提交_远程仓库_06

2、指定目录作为仓库

git init [路径]

gitlab java 获取用户所有提交_版本库_07


初始化后,在对应目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

3、从现有 Git 仓库中拷贝项目

git clone 仓库地址 // 克隆到当前目录

gitlab java 获取用户所有提交_版本库_08

git clone 仓库地址 目录 // 克隆到指定目录

gitlab java 获取用户所有提交_git_09


4、仓库配置

git config -e // 针对当前仓库

gitlab java 获取用户所有提交_git_10


i进入--INSERT--模式下,可对配置进行编辑。

ECS键退出这个模式,:进入末行模式,x保存退出。

补充一下关于vim(linux系统常用的编辑器)的使用:
Command模式:用于输入文本编辑命令。
Input模式:添加文件新内容。
Last line模式:主要用来进行一些文字编辑辅助功能,比如字符串查找、替代和保存文件等,在命令模式中输入“:”、“ /”、“?”等字符,就可以进入末行模式,在该模式下,若完成了输入的命令或命令出错,就会退出Vim或返回命令模式。
:q结束Vim程序,如果文件有过修改,则必须先存储文件。
:q!强制结束Vim程序,修改后的文件不会存储。
:wq强制性写入文件并退。即使文件没有被修改也强制写入,并更新文件的修改时间。
:x写入文件并退出。仅当文件被修改时才写入,并更新文件修改时间;否则不会更新文件修改时间。

git config -e --global   # 针对系统上所有仓库

gitlab java 获取用户所有提交_版本库_11


设置提交代码时的用户信息(对当前仓库有效):

git config user.name "111"
git config user.email "1476212137@qq.com"
四、Git 基本操作
  • 最常用的六个命令
git status // 查看当前工作区状态
git add . // 添加文件到暂存区  .表示所有文件 也可以添加某个具体的文件
git commit -m "提交信息" // 将暂存区的内容添加到仓库  “”中的内容是关于这次提交的说明
// 有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 
// 此时,可以运行带有 --amend 选项的提交命令来重新提交:
git commit --amend -m "提交信息"
git pull --rebase // 从远程拉取代码并合并本地版本

这个时候如果有冲突出现了,那么需要解决冲突并执行

git rebase --continue
git push // 将本地文件上传远程并合并
  • 远程仓库与本地仓库的关系
git remote -v // 显示所有远程仓库地址
git remote set-url origin ssh://[仓库账户名]@[ip]:端口号/[项目配置的路径] // 修改远程仓库的配置信息,ip或者端口号等

添加远程版本库,gitee是配置的本地版本库名。本地版本库可以关联多个远程版本库,如gitee、github或者是自己搭建的远程版本库。

git remote add gitee https://gitee.com/the_wind_is_blowingL/golangStudy.git

在配置了多个远程仓库之后拉取和推送需要分开指定

git pull gitee master
git push gitee master
git push --set-upstream origin testBranch
  • 几个常见的场景

1、格式化问题
格式化是许多开发人员在协作时,特别是在跨平台情况下,遇到的令人头疼的细小问题。 由于编辑器的不同或者Windows程序员在跨平台项目中的文件行尾加入了回车换行符, 一些细微的空格变化会不经意地进入大家合作的工作或提交的补丁中。Git的一些配置选项会帮助你解决这些问题。
如果你是Windows程序员,且正在开发仅运行在Windows上的项目,可以设置false取消此功能,把回车符记录在库中:

git config --global core.autocrlf false

1.1目录层级太深导致文件名太长,拉取失败

git config --global core.longpaths true

2、删除没有被追踪(tracked)的文件

git clean -n // 一次clean的提示,提示哪些文件会被删除,并不会真的删除

git clean -f [路径]
// 删除当前目录下[或者某个路径下]所有没有 track 过的文件
// 不会删除 .gitignore 文件里面指定的文件夹和文件, 不管这些文件有没有被 track 过
 
git clean -df // 删除当前目录下没有被 track 过的文件和文件夹

git clean -xf
// 不常用,一般情况下使用前三个命令就好了
// 删除当前目录下所有没有 track 过的文件
// 不管是否是 .gitignore 文件里面指定的文件夹和文件

3、撤销修改的文件(modified)

git checkout . // .表示所有文件  也可以指定某一个文件

4、撤销add

git reset HEAD . // .表示所有文件  也可以指定某一个文件

5、撤销commit

git reset --soft HEAD^

6、重做某一次提交

git revert -n 提交的唯一id

在多次提交产生后,发现之前的提交有bug,这时候可以重做那次有bug的提交,解决冲突继续重做。这种情况会保留有bug的那次提交,并且产生一次新的提交。还有一种情况是,在重做了某次提交后又发现这次提交并没有问题,那可以把重做的那次提交再重做一次就回到了最初的提交了。
7、撤销push

git log // 查看提交信息

gitlab java 获取用户所有提交_git_12


回退到 33ca1064f1ec2a552672e02f54c4921ab89091e2 这个版本上

git reset --soft 33ca1064f1ec2a552672e02f54c4921ab89091e2

强制提交当前版本

git push origin master --force // master是分支名

慎重使用:这种方式会抹除提交的记录,而且这个提交之后的提交也会被抹除掉。
8、配置github sshkey
关联本地仓库与远程仓库,运行如下命令生成id_rsa和id_rsa.pub文件

ssh-keygen -t rsa -C "1476212137@qq.com"

输入命令clip < ~/.ssh/id_rsa.pub可将ssh keys复制到剪贴板上,然后到github Setting中选择SSH and GPG keys添加SSH keys
执行

git remote add orgin https://github.com/FsmileSunshine/testgit.git
git branch -M main
git push -u origin main

可能遇到如下报错:

fatal: unable to access 'https://github.com/FsmileSunshine/testgit.git/': Unknown SSL protocol error in connection to github.com:443

解决办法:执行

git config http.sslVerify "false"

再次执行上述命令在远程仓库成功生成main分支。
9、git stash的使用
在开发过程中可能遇到这样的情况:甲同学正在dev分支上修复一个bug,这个bug很难在短时间内修复完成。就在修复到一半的时候,测试又发现了一个新的重大bug,非常地紧急。修复这个重大bug的任务又分配到了甲的头上。甲同学只有先去修复这个重大bug了,但是甲同学上一个修复到一半的bug怎么办呢?这时候,git stash就派上用场了。

git stash // 保存现场
git stash save "备注信息" // 保存现场并添加备注
git stash list // 查看已经保存的存储列表
git stash show // 显示存储有哪些改动,默认第一个存储
git stash show stash@{NUM} // NUM为要显示的那个存储
git stash apply // 应用某个存储,但不会把存储从存储列表中删除,默认应用第一个存储
git stash apply stash@{NUM} // NUM为要应用的那个存储
git stash pop // 应用某个存储,并把存储从存储列表中删除,默认应用第一个存储并删除
git stash pop stash@{NUM} // NUM为要应用并删除的那个存储

这里可能会有个问题,报错如下:

gitlab java 获取用户所有提交_版本库_13


解决办法:

git stash pop stash@`{num`} // 需要加上``把大括号{转译一下

gitlab java 获取用户所有提交_git_14

git stash drop stash@{num} // NUM为要删除的那个存储
git stash clear // 删除存储列表所有存储

注意点:没有被git追踪的文件执行git stash后不会被添加到存储中,如果有新的文件需要保存到存储中,可以先执行git add .

10、git reflog 的使用
查看某个分支下的所有操作记录。
11、将某个分支上的提交应用到另外一个分支上
注意:如果遇到git cherry-pick xxx fatal: bad object xxx这样的报错,是因为git cherry-pick是本地特性,本地要有这个commit才可以被git cherry-pick。此时,你只需要git pull,然后再进行cherry-pick操作就好了。

git cherry-pick [commit id] // 提交id 可以用git log等查看
五、Git 分支管理
git branch // 列出所有本地分支
git branch -l // 列出所有本地分支
git branch -r // 列出所有远程分支
git branch -a // 列出所有本地分支和远程分支
git branch bug404 // 创建分支bug404
git checkout main // 切换到main分支
git switch main // 切换到main分支
git checkout -b dev // 创建并切换分支
git branch --set-upstream-to origin/master master // 将本地分支与远程分支关联
六、Git 查看提交历史
git log // 查看详细历史提交记录
git log --oneline // 查看简洁历史提交记录
git log graph // 查看历史提交记录  带拓扑图(可以看到合并、分支)
git blame [文件名] // 以列表形式查看指定文件的历史修改记录
七、Git别名

Git 并不会在你输入部分命令时自动推断出你想要的命令。 如果不想每次都输入完整的 Git 命令,可以通过 git config 文件来轻松地为每一个命令设置一个别名。 例如:

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status

这意味着,当要输入 git commit 时,只需要输入 git ci。

八、Git打标签

后期为某次提交打标签

git tag [版本号] [提交id]

默认情况下,git push命令并不会传送标签到远程仓库服务器上。 在创建完标签后必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样——可以运行

git push origin [标签名]

删除本地标签

git tag -d [标签名]

注意上述命令并不会从任何远程仓库中移除这个标签。
删除远程仓库标签

git push origin --delete [标签名]

删除本地在远程仓库没有的tag
可以先删除所有本地tag,然后再拉取远程上的tag。
注意:最好在git bash中执行如下第一条命令,在terminal中可能报错。

git tag -l | xargs git tag -d // 删除所有本地tag
git fetch --tags // 拉取远程tag
git push origin [tag name] // 推送一个本地tag到远程
git push origin --tags // 推送所有本地tag到远程