git 的配置
1.下载 Git 下载地址 ,选择自己系统对应的版本下载即可。
2.生成 ssh 秘钥:打开终端,执行 ssh-keygen -t rsa -C "你公司内部邮箱地址",此时文件会在 c 盘用户的.shh 文件夹中,复制 id_rsa.pub 的内容到你 gitlab/gitee 等的 ssh 中。
3.查询配置信息
列出当前配置:git config --list;
列出repository配置:git config --local --list;
列出全局配置:git config --global --list;
列出系统配置:git config --system --list;
4.全局配置 git 的用户名和邮箱
git config --global user.name "xxx"
git config --global user.email "xxx@xx.com"
四个关键点
git 的通用操作流程图
1.工作区:就是你平时存放项目代码的地方
2.暂存区(Index/Stage):数据暂时存放的区域,就是我们使用git add提交的区域
3.本地仓库:.git 文件夹里管理的本地仓库区域,里面可以包含很多本地分支,也就是通过git commit提交的区域
4.远程仓库:git 远程仓库,gitlab/gitee/github/svn 等等,通过git push提交远程仓库
总结:平时在工作去正常开发,通过 git add 提交代码到暂存区,通过 git commit 提交代码到本地仓库,通过 git push 提交代码到远程仓库
工作区的操作
init(初始化)
1.从 git 仓库克隆代码
git clone -b 分支名称 远程地址 指定的项目名
2.init 项目
cd 文件夹
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin 远程地址
git push -u origin 分支名称
add
1.提交工作区所有文件到暂存区:git add .
2.提交工作区中指定文件到暂存区:git add <文件名 1> <文件名 2> ...;
3.提交工作区中某个文件夹中所有文件到暂存区:git add [文件夹名];
rm(删除)
1.仅从暂存区中删除文件,但是工作区依然还有该文件:git rm --cached <文件名>;
2.删除工作区文件,并且也从暂存区删除对应文件的记录:git rm <文件名 1> <文件名 2>;
reset/revert(撤销/回滚)
1.取消暂存区所有暂存的文件:git reset;
2.取消暂存区已经暂存的文件:git reset HEAD <文件名>...;
3.撤销上一次对文件的操作:git checkout --<文件名>。要确定上一次对文件的修改不再需要,如果想保留上一次的修改以备以后继续工作,可以使用 stashing 和分支来处理;
4.使用 reset/revert 回滚代码,二选一
1.将本地代码回滚到指定 commit:
git reset/revert --hard HEAD^ 回退到上个版本
git reset/revert --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
git reset/revert --hard commit_id 退到/进到,指定commit的哈希码(这次提交之前或之后的提交都会回滚)
2.回滚后强制提交本地代码上去:git push -f origin 远程分支名
stash(暂存)
1.查看所有暂存的记录:git stash list 可用于恢复暂存时查看,会有 stash@{0}:信息,之后通过 0 作为 index 去应用暂存
2.查看暂存记录的详情,提交信息:git stash show 0
3.暂存当前修改:git stash / git stash save '说明信息',如果经常使用暂存功能,请务必添加说明信息,避免忘记是哪条切换不回来
4.应用暂存(暂存记录仍在):应用最新暂存 git stash apply 应用指定的暂存 git stash apply 0 如果是同一个文件使用时要先暂存再应用,不然要提交到本地仓库再操作
5.清除暂存:移除指定的储藏 git stash drop 0 应用暂存并将其清除 git stash pop 0
注:不加 stash{0} 都是操作最新的一次(栈顶)暂存,stash{0}就是数字而已,网上很多教程使用 stash@{0},我在实际操作中都不生效,只需要在后直接加 index 即可。 在实际工作中用到最多的应该是:保存暂存 git stash save '信息',然后切换分支去做别的事情,然后切回来把保存的暂存应用并删除 git stash pop,如果想要更多骚操作自行百度
暂存区的操作
log(查看)
查看提交历史:git log 显示所有提交过的版本信息,不包括已经被删除的 commit 记录和 reset 的操作
commit 7b1e2c6bd3851732d0d3e1d01169cd31042b64bc
Author: libinbin <libinbin@ainirobot.com>
Date: Sat May 19 17:26:33 2018 +0800
第三次commit
commit 004ff75d9ccf27b6721f6b6ea86efa92319f4102
Author: libinbin <libinbin@ainirobot.com>
Date: Sat May 19 17:08:15 2018 +0800
第一次commit
gitlog 的具体参数
查看所有分支的操作记录:git reflog 包括 reset 掉的记录,使用 cherry-pick 的时候需要执行这句话,查看曾经的提交历史以及被 reset 掉想要重新找回的历史
2e39ab1 HEAD@{15}: commit (merge): feat: d
750cf0d HEAD@{16}: commit: feat: f
c5af345 HEAD@{17}: commit (merge): feat: update
062055c HEAD@{18}: checkout: moving from main to test
fb2af28 HEAD@{19}: commit: feat: update
gitlog 的具体参数
commit(提交)
1.正常提交需要有 add 的内容,若无则无法 commit:git commit -m "提交信息"
2.跳过 add 将暂存区提交:git commit -a -m "提交信息"
3.撤销上一次的提交:git commit --amend
tag(标签)
轻量标签:就是简单输个标签名即可,不会有任何附带信息 git tag v1.0
附注标签:需要强制附带备注信息,git tag -a v1.0 -m 第一次发版
查看标签信息与对应的提交信息:git show /git show v1.0
给指定的提交历史打标签:git tag -a v1.0 9fceb02
推送标签到远程:git push origin v1.0 不需要指定分支,它会在远程仓库共享,在仓库中可以找到 tag 并查看
删除本地标签:git tag -d v1.0
删除远程标签:git push origin -d v1.0
branch(分支)
创建本地分支:git branch 分支名
切换到本地分支:git checkout 分支名
上面二合一,创建分支并切换到分支:git branch -b 分支名
删除本地分支:git branch -d 分支名
删除远程分支:git push origin --d 远程分支名
合并分支:git merge 分支名 合并远程分支 git merge origin/master
在远程分支的基础上创建本地分支:git checkout -b test origin/master 如果这个记不住:也可以用比较简单容易记的方法就是先创建本地分支,再强制拉取,其实就是拆分
git branch test
git checkout test //这两个又可以合并为git branch -b test
git fetch --all
git reset --hard origin/master //这四个可以合并为git checkout -b test origin/maset
这个时候远程是没有这个分支的,在提交时要指定提交到远程,会自动创建远程分支,git push origin test
强制拉取远程分支内容到本地分支:
-
git fetch --all //拉取远程仓库上所有分支的最新内容,但不合并
-
git reset --hard origin/master //将工作区的代码重置成远程分支的内容
切换到远程分支,并且在本地切换到该分支:
-
git fetch origin master
-
git checkout master
git fetch 与 git pull 的区别
这两个都是从远程分支拉取代码,它们的区别是 fetch 不会进行 merge,而 pull 会进行合并。fetch+merge === git pull。fetch 没有真正把内容合并到本地库,只是把更新下载下来,让你知道你本地版本和远端有什么差异,是否会有冲突等
git fetch origin 分支名 可以指定当前的 fetch-head 指针,之后可以直接 git fetch,
在 fetch 后,可以看到工作区不会有任何变化,但是我们可以在暂存区看到拉取代码跟本地的对比,然后去选择是否要进行合并,而 pull 就是直接合并了
git pull 拉取不到最新代码: 很大可能是本地分支并未与远程分支建立过连接,你只是把远程代码 fetch 下来了,并且 checkout 过去,并未建立连接。
使用 git pull origin 分支名 这样可以拉取到最新的,但是下次使用 git pull 仍然拉取不到最新的。所以使用 git branch -u origin/分支名
rebase(变基)
pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)
比如说现在在自己的分支中你提交了三个 commit:commit1、commit2、commit3
git rebase -i //-i是使用编辑界面,此时可以输入i进入编辑修改操作指令,修改提交信息,比如将commit1 跟 commit2 drop掉,然后将最后一条commit3给reword修改注释,然后esc退出编辑,wq保存
git rebase --continue //如果有冲突先解决冲突,如果rebase中途出现问题,可以使用git rebase --abort恢复。
git push //提交,这个时候就只有一条commit信息
使用 rebase 可以把一个分支的改动复制到另一个分支上
git rebase [startpoint] [endpoint] --onto [branchName] //[startpoint] [endpoint]指定的是一个前开后闭的区间,所以起点要后退一步
git rebase 90bc0045b^ 5de0da9f2 --onto master
git checkout master
git reset --hard 0c72e64 //将master所指向的提交id设置为当前HEAD所指向的提交id
cherry-pick
假设仓库中有三个分支:master、feature-a、feature-b。现在需要将 feature-a 中的两次 commit 合并到 feature-b 中
1.git checkout feature-b //切换到feature-b 分支
2.git reflog //查看所有的操作记录,拿到需要的HEAd值
3.git cherry-pick 6b95b5 b09a488 //挑选commit
这时候,如果没有冲突的话, git log 就可以看到 feature-b 分支上会多出 2 次新的提交
这个时候它是自动提交的,如果想不自动提交,执行:git cherry-pick 6b95b5 b09a488 -n
发生冲突:
1.自己手动解决完所有冲突
2.git add -u 标记有冲突的文件已经解决好冲突
3.git cherry-pick --ontinue
除此以外,如果你过程中不想 cherry-pick了,只需执行:git cherry-pick --abort
从 feature-a 分支选择连续的提交合入到 feature-b:
git cherry-pick d3113d5...b09a488c01 //左开右闭,开头应该后退一步
git cherry-pick 6b95b58^...b09a488c01 //左闭右闭
其他有用的选项:
-e/--edit:进行 cherry-pick 时,会在进行新的提交之前,重新编辑提交的信息
x:在记录提交时,会在原始提交消息后添加一行cherry picked from commit …,以表明此更改是从哪个提交中挑选出来的。 这仅适用于没有冲突的 cherry-pick
-s/--signoff:在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作
本地仓库的操作
查看本地仓库关联的远程仓库: git remote -v
查看远程仓库的详细信息:git remote show origin
将本地仓库某分支推送到远程仓库上:git push origin 远程分支名
将本地分支推送到远程仓库的不同名分支:git push origin 本地分支名:远程分支名
删除远程分支:git push origin --d 远程分支名 //删除本地分支:git branch -d 分支名
删除远程仓库:git remote rm 远程仓库名
.gitignore
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为 txt 的文件
doc/**/*.txt
.gitkeep
Git是不会把一个完全空的文件夹添加到版本控制里,为了让空文件夹被跟踪,常规做法是在空文件夹里添加.gitkeep。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!