git仓库操作
git init
初始化一个新的git仓库,执行git init
会在当前目录创建一个名为.git的子目录,git会将元数据存储在其中
git clone <仓库链接>
在当前目录克隆一个已存在的仓库,会创建一个本地仓库的副本,包括其所有的历史记录和分支
git status
显示仓库状态,也可以查看当前处于哪个分支、任何暂存或未暂存的修改以及任何未跟踪的文件
git stash
贮存,切换分支前临时保存还未提交的修改
git提交/推送操作 —— commit | push命令
git add <file>
将文件<file>的修改内容添加到下一次提交,执行git add会将指定文件添加到暂存区,这些文件将包含在下一次提交中
git commit
执行git commit
会创建一个新提交,这个提交包括暂存区的修改(git add
的修改)以及来自上次提交以来做的任何其他修改
使用git commit -m “commit message” -m
选项将为这次提交附带一条描述信息
git push <origin> <main>
将提交推送到远程仓库origin的main分支,执行git push后将把本地commit的所有未提交修改推送到远程分支,更新对应的远程分支
使用以下命令指定本地分支、远程分支,安全推送
git push origin local:remote # 将本地local分支推送到远程remote分支
在这种情况下,远程如果没有remote分支,将自动创建
省略远程分支,将自动将本地分支推送到远程同名
git push origin local # 将本地local分支推送到远程local分支
在这种情况下,如果远程没有local分支,会产生fatal错误,必须首先创建远程分支并建立连接关系
git push --set-upstream origin local # 将本地local分支推送到远程local分支(新建)并确立连接关系
省略本地分支名,将自动将本地当前分支推送到远程同名分支
git push origin # 假如当前本地分支是dev,等同于git push origin dev:dev
当远程分支只有一个,可省略远程分支名推送
git push # 假如当前本地分支是dev,远程分支只有一个origin,等同于git push origin dev:dev
git拉取操作 —— fetch | pull命令
git fetch <origin> <main>
取回远程仓库origin的main分支的所有提交。可以注意“取回”二字的含义:即不合并到当前分支,因此git fetch并没有以下操作:
git fetch origin master:master # fetch是取回,并不存在合并到master,除非本地并没有master分支
执行以下命令可以提前远程代码并且在本地新建临时分支:
git fetch origin master:tmp
此时可以通过git merge将tmp合入master
不使用:字符,将自动创建一个FETCH_HEAD临时分支,将变更存储在这里
git fetch origin master
# >> * branch master -> FETCH_HEAD
可以基于远程仓库的tag取回代码
git fetch origin tag2024xxxx # 拉取远程仓的对应代码
可以拉取远程仓库的所有tag
git fetch --tags # 拉取远程仓全部tag
git pull <origin> <main>
拉取远程仓库origin的main分支的所有提交,并将其更新到执行git pull时的当前分支中,可能会产生冲突
如果不想拉取到当前分支,可以通过“:”指定分支:
git pull origin master:test # 拉取远程仓master代码到test分支
关键点:指定远程分支,不指定的话默认拉取的是master分支
注意:git pull = git fetch + git merge,即省略了创建临时分支并git merge的场景
git分支操作命令
git branch
使用git branch可以查看分支,用法包括:
git branch 查看本地所有分支
git branch -r 查看远程所有分支
git branch -a 查看本地和远程所有分支
使用git branch还可以新建分支
# 使用-b的作用是新建后直接切换到新分支上
git branch <test>
git branch -b <test>
使用git branch -d删除分支
git branch -d <test>
# 使用-r删除远端分支,但是需要push到远端生效
git branch -d -r <dev_5.7>
git push origin :dev_5.7
# 使用-D强制删除
git branch -D -r test
使用git branch -m重命名分支
git branch -m <oldname> <newname>
git push origin newname:newname # 重命名后同样需要推送到远端生效
# 使用-M可以强制改名
git checkout
签出分支
git checkout dev
git checkout -f dev # 使用-f强制切,会抛弃本地修改
git checkout -m dev # 使用-m融合切,会把本地修改切到新分支
git checkout -b newBranch # 使用-b在一个现有分支的基础上签出一个不存在的分支,可以基于当前分支新建并签出到对应分支
git checkout <-b branch> [tagname] # 切换到指定tag,可选参数;-b branch在本地创建一个分支承接
git merge
分支合并,首先签出目标分支,使用以下命令:
git merge <new-feature>
向当前分支合并
git rebase
git rebase <branchName>
变基,首先要理解字面意思。
基于master拉出了ver_1分支,进行了a修改,期间master进行了b修改,这时有两种方案回合,1是基于master对ver_1进行merge,2是首先对ver_1变基到最新版master,即变成ver_1分支基于b修改后的master拉出的,然后再进行pull
使用变基的好处是:获得更清爽的线性的提交记录
rebase与merge的区别:
补链接图https://blog.csdn.net/q95548854/article/details/98033268
从图上可以看出,rebase是将原分支上的修改重新添加到当前分支修改的前方,而merge是将当前分支的修改打包成一个提交,推送到原分支上
git revert <commit1>
撤销提交
git diff <branch1> <branch2>
比较两个分支间的差异。
git diff version_old version_new
默认比较的是本地分支,如果想比较远端分支,可以使用git branch -a先列一下,就可以看到远端分支的格式类似:
remotes/<远程仓库名>/<分支名>,因此使用格式如下:
git diff remotes/public/main remotes/private/main
查看tag —— git tag命令
git tag # 查看仓库打包tag默认列表
git tag -l [模糊的tagname,例如xxx*] # 筛选符合条件的tag
git tag -n # 显示tag列表,并显示描述信息
git ls-remote --tags origin # 查看远程所有tag
q # 退出
git tag -a “指定标签名” commitID # 给指定commit打标签
git tag v2.0 # 对当前分支打v2.0标签
git tag -a v2.0 -m '注释信息' #-m 后加注释信息, 当使用git show v2.0的时候, 会显示这个注释信息
git show tag名 # 查看tag信息
git tag -d [tagname] # 删除tagname,该命令结合git tag获取tagname
git push origin --delete <tagname> # 方式二:远程tag的删除
git clone --branch [tag] [git地址] # clone指定tag
git 代理配置
# git设置http、https代理
git config --global http.proxy socks5://127.0.0.1:7890
git config --global https.proxy socks5://127.0.0.1:7890
# 查看代理等配置
git config -l
# 取消代理
#取消http代理
git config --global --unset http.proxy
#取消https代理
git config --global --unset https.proxy
git实操案例
检出两个分支差异直接应用到第三个分支上
有时,基于最新版本分支version_now做的修改分支version_now_fix需要应用到version_old分支上,但是又担心version_now的修改被刷进去怎么办呢?
首先基于version_now_fix拉取本地新分支:
git checkout version_now_fix
git checkout -b version_old_fix
这样可以先比较下新分支与version_old之间的差异:
git diff version_old_fix version_old
然后执行变基操作,因为变基是将这个分支的一批提交整体往前或者往后挪,而不是带着他们一起合并
git rebase --onto version_old version_now version_now_fix
rebase --onto操作将检出version_now_fix分支,并且对比与version_now的差异,同时rebase到version_old上,让version_now_fix看起来像是基于version_old创建的
评论区