图中的几个专用名词解释:
Workspace: 工作区
Index / Stage: 暂存区
Repository: 本地仓库
Remote: 远程仓库
Git相关操作:
查看版本信息:git --version
配置相关:
1. 查看配置信息:
2. 配置用户信息
3. 其他配置
操作命令相关:
1. 新建代码库:
克隆并拉取指定分支的代码:git clone -b 分支名称 地址
2. 提交
3. 暂存
4. 查看状态
5. 分支管理
假如在dev分支上开发完并push,现想把dev分支上的代码合并到master,需要切换到master并执行 git pull , 然后git merge dev 即可
把整个 feature 分支移动到 master 分支的后面,有效地把所有 master 分支上新的提交并入过来
git checkout feature; git rebase master
6. 合并commitId
git log --oneline --graph 查看提交历史, 如:* 82489b7 (HEAD -> release/1.0.0, origin/release/1.0.0) update .gitignore* 7ac01e7 fix ci err* 93f7ec8 init dongdongviet project* bc0d48a (master) .gitignore* d3abfa5 init 如果要合并93f7,7ac0, 8248,则执行 git reset bc0d 然后执行 git add . 后执行 git commit git push命令即可
Git 问题集锦
情况一:最近一次 commit 的代码有问题怎么办?
git add 我是修改内容.txt
git commit --amend
【amend】修正,会对最新一条 commit 进行修正,会把当前 commit 里的内容和暂存区(stageing area)里的内容合并起来后创建一个新的 commit,用这个新的 commit 把当前 commit 替换掉。
输入上面的命令后,Git 会进入提交信息编辑界面,然后你可以删除之前的 changeId,并且修改或者保留之前的提交信息,:wq 保存按下回车后,你的 commit 就被更新了。
情况二:刚刚写的提交信息有问题,想修改怎么办?
git commit --amend -m "新的提交信息"
情况三:刚刚提交完代码发现,我有个文件没保存,漏了提交上去怎么办?
// 最简单的方式,再次 commit:
git commit -m "提交信息"
// 另一中方式,使用--no-edit,它表示提交信息不会更改,在 git 上仅为一次提交。
git add changgeFile // changeFile 刚刚漏了提交的文件
git commit --amend --no-edit
情况四:最新提交的代码没问题,它上一次提交的有问题怎么办?
git rebase -i
rebase -i 是 rebase --interactive 的缩写形式,意为「交互式 rebase」。
所谓「交互式 rebase」,就是在 rebase 的操作执行之前,你可以指定要 rebase 的
commit 链中的每一个 commit 是否需要进一步修改。
【注意】看 commit 历史的时候,最新的提交在最下面。
根据编辑界面中的提示,我们把要修改的倒数第二个 commit,也就是上面的
【修改代码格式首行缩进】前面 pick 指令改为 edit。edit的意思编辑器
中已给了解释,应用这个commit,但是停下来修正。
改完之后,esc退出,:wq 保存。
情况五:刚刚写完的提交太烂了,不想改了,想直接丢弃怎么办?
可以用 reset --hard 来撤销 commit
git reset --hard HEAD^
// HEAD 表示 HEAD^ 往回数一个位置的 commit ,HEAD^ 表示你要恢复到哪个 commit。
因为你要撤销最新的一个 commit,所以你需要恢复到它的父 commit ,也就是 HEAD^。
那么在这行之后,你的最新一条就被撤销了。
Git 代码已经 push 上去发现有问题
情况一:如果出错内容还在私有分支
这种情况你修改后,再次提交会报错,由于你在本地对已有的 commit 做了修改,这时你再 push 就会失败,因为中央仓库包含本地没有的 commits。这种情况只在你自己的分支 branch1 ,可以使用强制 push 的方式解决冲突。
git push origin branch1 -f
// -f 是 --force 的缩写,意为「忽略冲突,强制 push」
情况二:如果出错内容已经 push 到了 master 分支
这种情况可以使用 Git 的 revert 指令。
git revert HEAD^
// 上面这行代码就会增加一条新的 commit,它的内容和倒数第二个 commit 是相反的,
从而和倒数第二个 commit 相互抵消,达到撤销的效果。
在 revert 完成之后,把新的 commit 再 push 上去,这个 commit 的内容就被撤销了。
revert 与前面说的 reset 最主要的区别是,这次改动只是被「反转」了,
并没有在历史中消失掉,你的历史中会存在两条 commit :
一个原始 commit ,一个对它的反转 commit。
Git 关于暂存的问题
假如正在开发手中需求的时候,突然来了个紧急 bug 要修复,这时候需要先 stash 已经写的部分代码,使自己返回到上一个 commit 改完 bug 之后从缓存栈中推出之前的代码,继续工作。
添加缓存栈: git stash
查看缓存栈: git stash list
推出缓存栈: git stash pop
取出特定缓存内容:git stash apply stash@{1}
注意:没有被 track 的文件(即从来没有被 add 过的文件不会被 stash 起来,
因为 Git 会忽略它们。如果想把这些文件也一起 stash,可以加上 -u 参数,
它是 --include-untracked 的简写。就像这样:git stash -u
Git 分支相关问题
问题1:我想把本地创建的一个分支 koalanode提交到远程,并且远程分支名称要求 nodescript,且还未创建,需要怎能做?
我先在远程建了一个分支 nodescript,我本地也有这么一个分支,名字和远程的分支名称还不一样。首先,我把我本地的分支名称修改成和远程分支相同。
将本地新建分支 push 到自己的本地远程 origin 上,因为只在本地创建了一个新的分支,远程origin 上还没有该分支
把本地分支与远程 origin 的分支进行关联处理(通过 --set-upstream-to 命令)
git branch -vv
查看分支的关联关系,可见本地分支已于 origin 的分支建立上了关联关系,之后我们每次 push 或者 pull 的时候,只需要输入git push 或者git pull
git 用户名密码邮箱相关问题
公司仓库有账号密码,自己的github有账户密码,两个不同账户,有一次提交发现自己仓库的邮箱提交成了公司仓库设置的邮箱,有点尴尬,为什么会出现这种问题呢?
首先这个你在刚开始安装一趟的时候应该就用过:
// 设置查看 git 用户名和邮箱
git config user.name --查看git当前配置用户名
git config user.email --查看git当前配置的邮箱
git config user.name 名称 设置用户名
git config user.email 邮箱 设置git邮箱
全局命令设置
git config --global user.name 你的目标用户名;
git config --global user.email 你的目标邮箱名;
在项目中也可以查看这些信息
vi ~/.gitconfig;
知道了这些配置修改之后,你可以选择全局配置下,在公司电脑,或者提交前自己看下,就不会再出现上面的尴尬问题了。
git 提交规范
feat:新功能(feature)
fix:修补bug
docs:文档(documentation)
style:格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
Git 工具
推荐: SourceThree
SourceThree 下载地址:https://www.sourcetreeapp.com/
vim 常用命令
使用 Git 的时候,偶尔会对 Vim 中对 shell 脚本进行简单操作,为了节约时间,列出几个常用的 vim 快捷命令。
a,i,r,o,A,I,R,O 进入编辑模式
:q 一般退出
:q! 退出不保存
:wq 保存退出
yy 复制当前行的内容
ZZ 保存离开
dd 删除光标当前行
总结
遇到问题多问度娘,重要的是多练习!!!