Git 常用命令
软件安装
官方网址:https://git-scm.com/
基础配置
bash
# 以下配置的作用只是作为用户的标识
git config --global user.name 用户名 # 配置用户名
git config --global user.email 邮箱 # 配置邮箱
git config --global --list # 查看全局配置
git config --system --list # 查看系统配置
git config --global init.defaultBranch 分支名 # 配置默认分支名(一般为 main)
git config --global core.editor "'exe文件路径' --wait" # 配置 vscode 为默认代码编辑器
# 如果 vscode 添加了系统环境变量,则可以配置为如下指令,--wait 参数表示等待编辑完成
git config --global core.editor "code --wait"常用命令
bash
git clone 仓库地址 # 拉取仓库代码到本地(默认拉取分支 main 分支)
git clone -b 分支名 仓库地址 # 拉取仓库中指定分支的代码
git init # 初始化仓库
git add 文件名 # 添加指定文件到暂存区
git add . # 添加所有文件到暂存区,即实施文件跟踪
git reset head 文件名 # 撤销本次提交和文件暂存状态
git rm-cache 文件名 # 取消文件跟踪且本地保留文件
git status # 查看文件状态(被跟踪的文件显示绿色,未被跟踪的文件显示红色,提交后则不显示)
git commit -m "提交信息" # 在本地提交一次版本
git commit -am "提交信息" # 连带未暂存文件一起提交(仅对已跟踪文件生效,相当于合并了 git add 操作)
git reset head~ --soft # 取消本次提交, 但是首次提交不可撤回
git log # 查看当前分支的详细提交信息
git log --graph # 以图形化方式展示当前分支的提交历史
git reflog # 查看当前分支的精简提交信息
git log --pretty=oneline # 将当前分支的详细提交信息,并将信息按行格式化输出展示
git log --all # 查看所有分支的提交
git log --all --graph # 以图形化方式展示所有分支的提交历史
git reset --hard 版本号 # 版本回退,通过 git status 查看版本号ssh 配置
使用如下命令生成 ssh 密钥,之后在C盘用户中的 .ssh 文件夹中查看,添加到 Github 使其生效,之后采用 ssh 推动代码就不会出现网络问题
bash
ssh-kegen -t rsa -C "填写你的邮箱" # 执行后一直回车即可,指导提示密钥生成完成,带有 pub 后缀的文件是公钥,另一个是私钥远程仓库
bash
git remote # 查看远程仓库名
git remote rename 原仓库名 新仓库名 # 重命名仓库
git remote add 仓库名 仓库地址 # 添加远程仓库(常用 origin 作为默认仓库名)
git remote set-url 仓库名 新的仓库地址 # 修改远程仓库地址
git remote -v # 查看远程仓库地址
git push -u 仓库名 分支名 # 首次推送需要加上 -u 参数,之后直接采用 git push 仓库名 分支名 即可
git push # 不是首次推送代码,并且需要推送到上次推送的分支,采用这个命令
git push 仓库名 分支名 -force # 强制推送,覆盖远程仓库的代码
# 在首次推送代码时,会弹出界面要求输入用户名和密码
git config --global credential.helper store # 保存本地凭证
git credential-cache exit # 删除本地凭证分支管理
master (生产) 分支:线上分支,主分支,中小规模项目作为线上运行的应用对应的分支
develop(开发)分支:是从 master 创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到 master 分支,准备上线
feature/xxxx 分支:从 develop 创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到 develop 分支
hotfix/xxxx 分支:从 master 派生的分支,一般作为线上 bug 修复使用,修复完成后需要合并到 master、test、develop 分支
还有一些其他分支,在此不再详述,例如 test 分支(用于代码测试)、pre 分支(预上线分支)等等
bash
git branch --list # 查看所有分支
git branch # 查看当前所处分支
git branch 分支名 # 创建新分支
git checkout -b 分支名 # 创建并切换到新分支
git checkout 分支名 # 切换分支
git branch -d 分支名 # 删除本地分支
git branch -m 旧分支名 新分支名 # 重命名分支
git merge 分支名 # 合并分支(将指定分支的代码合并到当前分支)
git branch -r # 查看远程仓库所分支
git branch -vv # 查看本地分支与远程仓库分支的关联关系
git branch -u 仓库名/远程分支名 本地分支名 # 将本地分支与远程分支关联
git fetch 仓库名 分支名 # 拉取远程仓库的分支代码到本地暂存,不会修改当前分支的内容
# 如果需要应用拉取的分支代码,可以创建新分支并于远程分支关联,例如如下代码,又或者可以在新分支采用 pull 命令拉取
git checkout -b Dev origin/Dev
git fetch origin -p # 同步远程仓库分支和本地远程分支的信息(如果某些远程分支已经被删除,Git 会将这些远程分支的本地引用删除)
git push 仓库名 --delete 分支名 # 删除远程仓库的指定分支解决冲突
bash
# 当同一处出现不同的修改,在提交时就会出现冲突,需要手动解决冲突
git status # 查看冲突文件
git pull 仓库名 分支名 # 将远程仓库对应分支的最新内容拉下来后与当前本地分支直接合并修改冲突文件示例
bash
<<<<<<< HEAD
hello git! hello atguigu! master test
hello git! hello atguigu!
=======
hello git! hello atguigu!
hello git! hello atguigu! hot-fix test
>>>>>>> hot-fix
# <<<<<<< HEAD 表示当前所处分支的代码,======= 下方表示需要合并分支的代码
# 选择需要保留的代码,其余内容删除即可,保存后再次 add、commit 推送即可贮藏功能
bash
# 贮藏功能应用场景:临时保存当前分支未完成代码,切换到其他分支工作,再次切回分支时恢复未完成代码继续开发
# 注意事项:当文件修改后未提交,切换到其他分支时会报错,这时可以选择提交或者贮藏后再切换分支
git stash # 贮藏当前未完成代码
git stash apply # 恢复当前分支贮藏的代码
git stash list # 查看贮藏列表(最后的贮藏显示在最顶端,即 @{0} 这一项)
git stash apply stash@{记录号} # 恢复指定贮藏的代码
git stash pop # 恢复并删除最近一次记录
git stash drop @stash{记录号} # 删除指定贮藏记录重置与变基
bash
git reset head 文件名 # 撤销本次提交和文件暂存状态
# head:当前的提交
# head~: 上次的提交
# head~2: 倒数第二次的提交
# --soft 选项:仅取消 commit 操作,保留修改文件的暂存状态,如果不加 --soft 则表示恢复到暂存前,即需要重新 add、commit
# --hard 选项:取消暂存,取消修改内容,相当于彻底回到上次提交的状态,不推荐使用,会丢失数据
# 变基操作的本质是重写提交历史,注意事项如下
# (1)变基前务必确保工作区干净,否则会报错,可以通过 git status 查看工作区状态
# (2)不要对已推送到远程的提交做变基,变基会导致他人的仓库和你的冲突
git rebase 分支名 # 将当前分支的代码合并到指定的分支上(相当于搬家),区别于 merge 分支合并,rebase 可以让提交记录变得好看些
git rebase -i head选项 # 交互式界面,选择指定的提交记录进行编辑
git rebase -i --root # 对所有提交记录进行变基
# rebase 界面相关命令
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup [-C | -c] <commit> = like "squash" but keep only the previous
# commit's log message, unless -C is used, in which case
# keep only this commit's message; -c is same as -C but
# opens the editor
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# create a merge commit using the original merge commit's
# message (or the oneline, if no original merge commit was
# specified); use -c <commit> to reword the commit message
# u, update-ref <ref> = track a placeholder for the <ref> to be updated
# to this position in the new commits. The <ref> is
# updated at the end of the rebase
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.IDEA 使用 Git
教程视频:https://www.bilibili.com/video/BV1na411v7gS
ignore文件参考
# ##########项目默认生成##########
# Project exclude paths
/target/
# ##########个人##########
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
.flattened-pom.xml
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
/mvnw.cmd
/mvnw
/.mvn/
# ##########GitHub官方(https://github.com/github/gitignore/blob/main/Java.gitignore)##########
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*