Git常用命令
初次建立仓库
方法一:先建立本地仓库,例如mark
git init 初始化仓库
git remote add mark(远程git名) https://www.gitee.com/个性化域名/mark.git
这样就完成了版本的初始化
git pull mark master
将远端仓库代码下拉
git add 文件名(输入.为全部)
git commit -m "初始化仓库 #20201126"
git push mark master
第一次提交需输入用户名和密码,之后会存储至“控制面板\所有控制面板项\凭据管理器”中
在新建仓库时,如果在平台仓库上已经存在 readme 或其他文件,在提交时可能会存在冲突,这时用户需要选择的是保留线上的文件或者舍弃线上的文件,如果您舍弃线上的文件,则在推送时选择强制推送,强制推送需要执行下面的命令(默认不推荐该行为):
git push mark master -f
如果您选择保留线上的 readme 文件,则需要先执行:
git pull mark master
方法二:创建远程仓库mark,先将远程仓库克隆到本地,修改后再进行push
git clone https://www.gitee.com/个性化域名/mark.git
配置git的本地信息,执行 git config
配置好,可使用 git config -l
展示所配置的git本地信息
git config --global user.name "xxx"
git config --global user.email "xxx@qq.com"
修改代码后,执行提交命令
git add .
git commit -m "代码仓库初始化 #20201127"
git push mark master
Git配置
Git提供了名为git config的工具用于配置工作环境,配置好的环境变量决定了Git的工作方式和行为。
/etc/gitconfig:系统中对用户系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
~/.gitconfig:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
当前仓库的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前仓库有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
常见命令使用
远程仓库常见命令
git clone https://www.gitee.com/xxx.git #克隆仓库
git remote -v #查看远程仓库
git remote add [name] [url] #添加远程仓库
git remote rm [name] #删除远程仓库
git remote set-url --push [name] [newUrl] #修改远程仓库
git remote rename [oldname] [newname] #修改原创仓库名
git pull [remoteName] [localBranchName] #拉取远程仓库
git push [remoteName] [localBranchName] #推送远程仓库
Git Commit message
在Git中,每次提交代码后,都需要写Commit message,否则不允许提交
git commit -m "第一次提交 #20201128"
-m参数用于指定 commit message
如果一行不够写,则直接执行 git commit
格式
<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
Header
Type
feat:新功能(feature)
fix:修复bug
docs:文档(documentation)
style:格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
chore:构建过程或辅助工具的变动
如果 type 为 feat 和 fix ,则该 commit 将肯定出现在 Change log 之中。其他情况(docs、chore、style、refactor、test)由你决定,要不要放入 Change log,建议是不要。
Scope
scope
用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视仓库不同而不同。
Subject
subject
是 commit 目的的简短描述,不超过50个字符。
以动词开头,使用第一人称现在时,比如change,而不是changed或changes
第一个字母小写
结尾不加句号(.)
Body
Body 部分是对本次 commit
的详细描述,可以分成多行。有两个注意点。
使用第一人称现在时,比如使用change而不是changed或changes。
应该说明代码变动的动机,以及与以前行为的对比。
Footer
Footer 部分只用于两种情况。
1.不兼容变动
如果当前代码与上一个版本不兼容,则 Footer 部分以BREAKING CHANGE开头,后面是对变动的描述、以及变动理由和迁移方法。
2.关闭 Issue
如果当前 commit 针对某个issue,那么可以在 Footer 部分关闭这个 issue 。
Closes #234
也可以一次关闭多个 issue 。
Closes #123, #245, #992
代码合并
冲突合并一般是因为自己的本地做的提交和服务器上的提交有差异,并且这些差异中的文件改动,Git不能自动合并,那么就需要用户手动进行合并
git merge branch #将当前分支与branch分支进行合并
git rebase branch #将当前分支与branch分支进行合并,可以创造更线性的提交历史,代码库的提交历史将会变得异常清晰
版本回退
回退到当前版本(放弃所有修改)
git status
git reset --hard
放弃某一个文件的修改
git status
git checkout mou.md #放弃mou.md文件的修改
回退到某一版本但保存自该版本起的修改
git status
git log #git提交历史日志
git reset 59e194b48646aa25930d2b920e6fc6577a40401c #回退到该版本号的版本
回退到某一版本并且放弃所有的修改
git status
git log
git reset --hard 59e194b48646aa25930d2b920e6fc6577a40401c #回退到该版本号的版本并放弃所有修改
回退远程仓库的版本
先将本地分支切换到想要远程仓库回退分支的对应本地分支,将对应本地分支回退到需要的版本,强推
git push mark master -f #格式:git push [仓库名] [本地分支名]
回退至和远程版本一致
有时候,当发生错误修改需要放弃全部修改时,可以以远程分支作为回退点退回到与远程分支一样的地方
git reset --hard mark/master
撤销Commit操作
git reset --soft HEAD^
--mixed #不删除工作空间改动代码,撤销Commit操作,并撤销git add操作.为默认参数
--soft #不删除工作空间改动代码,只撤销Commit操作,不会撤销git add操作
--hard #删除工作空间代码,撤销Commit操作,撤销git add操作.使用后回退至上次提交前的Commit状态
git commit --amend #修改Commit操作的注释
Reset与Revert区别
git reset
通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。git reset
向上移动分支,原来指向的提交记录就跟从来没有提交过一样。
虽然在你的本地分支中使用 git reset
很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的。为了撤销更改并分享给别人,我们需要使用 git revert
。要撤销的提交记录后面会多一个新提交,新提交记录 C2'
引入了更改,这些更改刚好是用来撤销 C2
这个提交的。也就是说 C2'
的状态与 C1
是相同的。
仓库分支
git branch bugFix #创建一个新的bugFix分支
git checkout bugFix #从当前分支切换至bugFix分支
git checkout -b bugFix #创建bugFix分支并切换
分离HEAD
git checkout Commit3 # HEAD->main->Commit3 => HEAD->Commit3 main->Commit3
相对引用
使用 ^
向上移动一个提交记录,使用 ~<num>
向上移动多个提交记录,如~3
git branch -f main HEAD~3
移动分支可以直接使用 -f
选项让分支指向另一个提交
整理提交记录
git cherry-pick
可以将指定的提交号复制到当前分支后
命令格式 git cherry-pick <提交号> ...