Git使用指南
# mac安装command line tools之后自带git开发环境,以下是linux的安装,Windows安装客户端即可。 sudo apt-get install git # 初始化git git init # 配置用户信息 git config --global user.name 'teark' git config --global user.email '...@...com'
git config --global user.password '18340800000'
git config --global credential.helper cache 记住密码15分钟 git config credential.helper 'cache --timeout=3600' 记住密码一小时 git config --global credential.helper store 永久记住(经常弹窗的话,输入完用户名密码后输入这个就记住了) # 重置git git config --system --unset credential.helper
二. Git常用命令
# 查看文件状态,红色-工作区;绿色-暂存区 git status # 工作区到暂存区 git add . # 暂存区到仓库 git commit -m 'haha'# 回滚到第2版 git reset --head 2/<version number> # 切分支 git checkout <filename> # 创建并切换到dev分支 git checkout -b dev # 提交分支到服务器 git push -u origin dev # 临时贮存起来(遇到切换分支提示必须commit可以用这个) git stash # 查看远程仓库地址 git remote -v # 放弃当前的修改,若没改,不用git stash了 git checkout . # 对比不同(退出按q) git diff # 查看日志(退出按q) git log/reflog
三. 清理分支
自己不能删自己,删自己所在的分支时记得先切换到别的分支。
# 先切换到别的分支 git checkout zcx_pay # 删除自己开发的分支 git branch -d lx_chainblock # 删不了强制删 git branch -D lx_chainblock
四. 仓库太大清理历史垃圾
删除臃肿的.git文件夹,重新建立索引。
rm -rf .git git init git add . git commit -m "init" git remote add origin 远程仓库地址(https://xxx.git 或 git@xxx.git 均可) git push -f origin master
五. 新功能开发
# 创建分支并同步 git checkout dev(若没有就git branch -b dev,它等于git branch dev, git checkout dev) git pull # 开发完之后 git add . git commit -m "添加了新功能" git push # 后台审核代码 merge request submit 提交合并请求
六. dev提交到master
git checkout master
git merge dev
git push
七. Git工作流专业词
master:保存历史版本的主分支。
dev:是开发的活跃分支, 所有人编写的功能或bug修复代码都要最先整合到dev分支上,在需要打包发布上线的时候,在从dev分支创建release分支,再整合到master上。
feature:功能分支,每个人在开发新功能的时候都是从dev分支上创建一个功能特性分支feature,如开发区块链功能lx_chain_box。
release:发布分支,从dev中分出 ,用于整合打包测试。
hotfix:紧急bug修复分支。
八. 解冲突
冲突解决两种方式,推荐fetch,这样能保证自己的代码整洁性。pull过程中会有冲突提醒解决代码冲突之后就可以在gitlib上进行merge,就可以成功了。pull等于fetch+merge
fetch解冲突
# fetch 拉取最新的代码 但是不会与本地代码合并 git fetch origin/dev # 比较代码两种方式二选一 git diff origin/dev pycharm git-> compare with branch # 自己手动修改冲突代码 # 重新提交合并请求 git add . git commit -m "修复了..." git push # 或放弃 git merge --abort
pull解冲突
# pull 拉取最新代码,同时还会与本地的代码在本地进行合并,即git pull == git fetch & git merge git pull origin/dev # 查看冲突地方 git status或者git diff # 自己手动修改冲突代码 # 重新提交合并请求 git add . git commit -m '修复了...' git push # 或放弃 git merge --abort
stash之后借冲突
git stash
git pull
# 观察
git stash list
# 全恢复第一个版本的stash
git stash pop
九. 撤销提交(包括历史信息)
git reset --soft HEAD~1 # 这会将 HEAD 指向的分支的最新提交撤销掉,并保留所有更改在工作目录中。这样你就可以重新提交,并修改提交信息。 git reset HEAD~1 # 这会将 HEAD 指向的分支的最新提交撤销掉,并将暂存区的文件取消暂存,但保留在工作目录中。这样你可以重新选择要暂存的文件。(由于本地没有其他修改,暂存区也没有文件,因此,使用该命令) git reset --hard HEAD~1 # 这会将 HEAD 指向的分支的最新提交撤销掉,并丢弃所有更改,包括暂存区和工作目录中的文件。这样你就可以完全回到上一个提交的状态。 git reset --hard <commit-hash> # 这会将 HEAD 指针移动到指定的提交,并丢弃所有更改。这可以用来回滚到历史提交状态 git push --force # 将本地分支推送到远程仓库,并且使用 --force 选项强制覆盖远程仓库中的提交历史。
十. 报错集锦
报错:git pull出现 fatal: refusing to merge unrelated histories
git merge master --allow-unrelated-histories git pull origin master --allow-unrelated-histories git push --set-upstream origin master
或者重置再pull(推荐这种)
git fetch --all git reset --hard origin/master git pull
报错:Please move or remove them before you can merge
这是因为本地有修改,与云端别人提交的修改冲突,又没有merge,如果确定使用云端的代码,最方便的解决方法是删除本地修改,可以使用以下命令
# 强制清除(d:删除未被添加到git的路径中的文件;f:强制运行;x:删除忽略文件已经对git来说不识别的文件) git clean -df
报错:The current branch dev has no upstream branch.To push the current branch and set
# 重新设置源分支即可 git push --set-upstream origin master
报错:The file will have its original line endings in your working directory
# windows中的换行符为CRLF,而Linux/macOs下的换行符为LF,环境不一致导致换行符报错,相关配置项改为false即可 git rm -r --cached . git config core.autocrlf false git add .
gitignore文件中忽略项不起作用?
新建的文件在git中会有缓存,如果某些文件已经被纳入了版本管理中,就算是在.gitignore中已经声明了忽略路径也是不起作用的,这时候我们就应该先把暂存区文件删除,再进行add,commit,push。所以养成先习惯建立.gitignore再开发的习惯。
#删除所有缓存区(保留工作区) git rm -r --cached . # 如:删掉远端的.idea文件 git rm -r --cached .idea
放弃本地修改,选择远程分支
git fetch --all git reset --hard origin/dev git pull