Git使用教程、命令

Git使用教程、命令

Git

本文连接:https://blog.csdn.net/leiduifan6944/article/details/129432110

git官网

https://git-scm.com/

优势:

大部分操作在本地完成,无需联网

完整性保证

尽可能添加数据而不是删除或修改数据

分支操作非常快捷流畅

与linux命令全面兼容

工作区、暂存区、本地库

工作区:编辑、增删改查
暂存区:保存工作区提交上来的记录
本地库:将暂存区的历史记录保存到本地库持久化

工作区 —— git add —— 暂存区 ——git commit —— 本地库 —— push/pull —— 远程库

代码托管中心:远程库
内网:gitlab
外网:github、码云

本地库——push——远程库
远程库——pull——本地库

基本配置

git的配置文件位置:

win:   c:\users\<userName>\.gitconfig
linux: /home/<userName>/.gitconfig              # 个人
       /etc/gitconfig                           # 系统全局

# 修改git init时的默认分支为master, 但gitlab上创建仓库时默认分支是main,可以修改git init的默认参数,使其初始化为main

1)、直接修改配置文件
如果已有[init]则修改其下配置,如果没有,则新增,其他配置项不变:
    ...
    [init]
        defaultBranch = main					# 修改默认初始化分支
2)、命令设置
    git config init.defaultBranch               # 查看默认分支
    git config --global init.defaultBranch "main"     # 设置默认初始化分支,缺省状态默认为“master”

配置项及命令:

git config --list                                 # 查看全部配置
git config --global --list                        # 查看个人配置
git config --system --list                        # 查看系统配置
git config user.name                              # 查看用户名
git config user.email                             # 查看用户邮箱
git config init.defaultBranch                     # 查看默认分支

# 系统级
git config --global user.name “用户名”             # 设置用户名
git config --global user.email “邮箱”              # 设置用户邮箱
git config --global init.defaultBranch "main"     # 设置默认初始化分支,缺省状态默认为“master”

# 用户级、项目级,存放于当前项目.git文件夹下的config文件中;当用户级和系统级同时存在时优先采用用户级;实际开发过程中极少使用用户级
git config user.name “用户名”          # 设置用户名
git config user.email “邮箱”           # 设置用户邮箱


ssh-keygen                            # 生成ssh key,用于ssh免密与远程库交互

# 删除配置
git config --global --unset init.defaultbranch 

用户名和用户邮箱只用区分用户,可以时不存在的

基本命令

git add [<.>, <file>]                   # 提交追踪的文件到仓库,.表示当前目录下所有文件
git commit -m "message"                 # 为本次代码提交做备注说明,比如做了新增、更新了哪些功能等等
git push origin HEAD:refs/heads/master  # 提交到指定分支 master

git status                              # 检查状态
git reset                               # 撤销git add
git log                                 # 查看提交/版本/历史记录
git diff [<file>]                       # 查看当前工作区的file与仓库中file的不同的地方,就是查看做了哪些修改

git stash                               # 暂存当前状态
git stash list                          # 查看保存的工作场景
git stash pop                           # 恢复保存的内容,并把stash中的内容删了

git rm -cached <file>					# 当文件add但缓冲区了用该命令撤销缓冲区的追踪
git log --pretty=oneline				# 每行显示一条日志,且显示完整的hash
git log --oneline						# 每行显示一条日志,显示hash前7位
git reflog								# 查看全部每次提交的hash前7位和message信息以及head跳转多少次可以跳转到哪里
# 前两个查看log只能查看当前到开始,第3个可以查看所有,并查看当前在哪个版本

git reset --hard *******				# 将head跳转至指定的版本
git reset --hard HEAD^					# 一个^回退一个版本,n个^就回退n个版本
git reset --hard HEAD~2					# 回退2个版本,可以回退n个版本
git reset --hard HEAD					# 重置工作、暂存区至最近一次提交的状态

# hard、soft、mixed
--hard:
	在本地库移动HEAD指针;重置暂存区;重置工作区
--soft:
	仅在本地库移动HEAD指针
--mixed:
	本地库移动HEAD指针;重置缓暂存区

分支控制

# 同时并行推进多个功能模块的开发,多分支;
# 单个分支功能开发失败不会影响其他分支,失败的分支删除重新开始即可;

git branch -va                          # 查看分支列表
git branch                              # 查看当前分支
git checkout newBranch					# 创建新分支newBranch
git checkout -b newBranch               # 创建新分支newBranch并切换到该分支
git checkout dev1.0                     # 切换dev分支
git branch -d dev                       # 删除本地分支
git branch -D dev                       # 强行删除本地分支
git remote -v                           # 查看当前git远程地址
git branch -m master main               # 重命名分支master为main

合并分支:

合并分支前请确保当前工作目录的所有修改已提交到代码仓库,否则将可能导致某些修改被丢弃并不可找回
例如:仓库有3个分支,分别为master、dev1.0、dev2.0,master为可对外应用的分支,dev1.0为提交给测试的分支,dev2.0为开发分支
    现在dev1.0分支的所有功能已经测试通过,我当前在dev2.0上又做了更新,现在要将dev1.0合并到dev2.0上,
    需要先将所有修改提交到dev2,否则当前工作区的修改将会倍舍弃,然后再进入到master分支,最后将dev1.0合并过来

将dev1.0分支的修改合并到master分支
    git checkout master             # 切换到master分支
    git merge dev1.0                # 将dev1.0合并过来
    git checkout dev2.0             # 返回到dev2.0分支,回到开发分支

合并失败/合并冲突:

$ git merge main
Auto-merging good.txt
CONFLICT (content): Merge conflict in good.txt
Automatic merge failed; fix conflicts and then commit the result.

​ 上述提示good.txt合并失败,有冲突,原因是两个分支都做了改动,自动合并不知道该保留哪个分支的;打开有冲突的文件,里面会以7个等号分格,其上到<<<<<<< HEAD为当前HEAD分支的内容,其下到>>>>>>> main为合并过来的分支的内容,需要手动决定删除哪个内容,保留哪个内容;修改好后,执行git status会提示有未合并的路径和文件,使用git add 去标记该文件冲突已解决,
再次执行git status,如果还有冲突,git还会提示;如果没提示有冲突了,那就执行 git commit 完成合并,注意:这里commit后面不要任何参数,git会自动帮你生成一个 Merge branch ‘分支1’ into 分支2 的注释并打开vim编辑器,直接在vim中保存退出即可;当然也可以-m加上自己的注释,这样git就不会帮你添加注释了;合并完成后,git项目状态会从(main|MERGING)回到当前分支状态;

远程

远程gitlab或github建立一个远程项目;

git clone https://***.git		# 复制一个远程库,并建立关联
git remote -v					# 查看远程连接
git remote add origin https://github.com/jiliang-Li/testgit.git
给本地库添加一个远程项目地址,用origin指向https://...,origin是远程项目的引用
git remote remove origin		# 删除一个远程关联
git push origin main			# 将本地库推送到远程的main分支

合并远程分支:当别人开发的功能上传到远程后,我们需要拉取远程内容并合并到我们的项目库

pull = fetch + merge
git fetch origin main				# 拉取远程main分支本地库;不改变工作区内容
git merge origin/main				# 合并远程main分支到本地,改变工作区

git pull origin main				# 拉取远程main分支并合并本地库和工作区
ssh-keygen -t rsa -C ***@123.com	# 为某个邮箱生成密钥对,远程添加公钥后,下次推送到远程就不需要再输入密码了;
ssh-keygen							# 直接运行该命令也可以生成针对本设备的密钥对

git push origin <远程分支>				 # 提交到origin远程的指定分支
git push origin --delete <branch>      	# 删除远程分支及其远程的关联分支
git push --set-upstream origin master	# 设置默认push分支

git pull origin <远程分支>:<本地分支>	   # 将远程指定分支 拉取到 指定本地分支上
git pull -f origin 远程分支名:本地分支名	 # 强制拉取合并
git pull origin <远程分支>                # 将远程指定分支 拉取到 本地当前分支上

git remote remove <name>                # 删除某个关联仓库,比如remove origin

推现有文件夹

git init								# 初始化项目库
git remote add origin [email protected]:path/proj.git	# 关联远程仓库项目
git pull origin main                    # 先pull,将远端仓库的建项目时的初始化文件拉下来
git add .								# 追踪所有内容
git commit -m "Initial commit"			# 提交本地库
git push -u origin master				# 推送到远程仓库

迁移git项目

git clone --mirror 项目原代码仓库地址 //将原仓库远程项目克隆到本地会生成一个 .git 文件
cd 生成的.git文件 //cd 进入(xxx.git)文件
git push --mirror 新项目代码仓库地址  //将本地克隆推送到新服务器

其他异常处理

(main|MERGING) # 合并、提交冲突
git reset --hard head # 重置当前的分支至上一次提交状态

如果时merge出现问题,就针对提示问题进行修复后提交


# 冲突
 could not apply       after resolving the conflicts........
 git checkout --theirs
 /
 git checkout --ours

git cherry-pick id

有冲突时:
git cherry-pick --abort # 放弃合并
git cherry-pick --continue # 解决某些冲突后,继续查看下一个冲突

git commit后,如何撤销commit
修改了本地的代码,然后使用:

1、git add file
2、git commit -m ‘提交信息’
执行commit后,还没push到远程仓库时,想要撤销这次提交本地仓库的commit,该怎么办?
解决方法:
第一种:执行 git reset --soft HEAD~ 可成功撤销最近一次commit到本地仓库的提交,所有撤销的代码修改进入暂存区。
第二种:如果想要连着add也撤销的话,git reset --hard HEAD~(删除工作空间的改动代码,慎用)。
命令详解:
HEAD~ 表示上一个版本,即上一次的commit,也可以写成HEAD~1
如果进行两次的commit,想要都撤回,可以使用HEAD~2
--soft 不删除工作空间的改动代码 ,撤销commit,不撤销git add file
--hard 删除工作空间的改动代码,撤销commit且撤销add(慎用)
另外一点,如果commit注释写错了,先要改一下注释,有其他方法也能实现,如:
git commit --amend
这时候会进入vim编辑器,修改完成你要的注释后保存即可。

================
持续更新~,有遇到新的问题以及解决方案时,我会及时记录到这里,这只是我工作经验总结分享的一部分,如果有理解不到位的地方欢迎猿友们指正,非喜勿喷!!!☺☺☺

扫描二维码关注公众号,回复: 15052736 查看本文章

猜你喜欢

转载自blog.csdn.net/leiduifan6944/article/details/129432110
今日推荐