Git中文文档
工作常用指令
设置与配置
git config --list 列出所有git配置项
git config --global user.name "yangliuan" 配置用户名
git config --global user.email "yangliuancn@foxmail.com" 配置用户邮箱
git config --global core.editor vim 配置默认编辑器
git config --global core.filemode false 所有版本库忽略文件权限跟踪
git config core.filemode false 当前版本库忽略文件权限跟踪
建立版本库
git init 新建项目
git clone 从线上拉取一个项目
git clone -b 分支名称 仓库地址 [文件夹名称] 克隆指定分支 文件夹名称选填不需要重命名的时候不填
git add . 监控工作区的状态树,把工作区的所有变化提交到暂存区包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件
git add -u 仅监控已经被add的文件(即tracked file)他会将被修改的文件提交到暂存区
git add -A 是上面两个功能的合并(git add --all的缩写)
提交代码
git commit -m "注释"
git push 推送
git push origin [branch] 推送到远程指定仓库
git push -u origin master 推送到远程指定仓库并设置为默认推送分支
git pull 拉取
git pull origin [branch] 拉去远程代码
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase
git rebase用于把一个分支的修改合并到当前分支。
仓库管理
git remote rename oldname newname 重命名仓库
git remote rm name 删除仓库
git remote set-url origin git@xxxxx.git
更换仓库出现如下错误,原因是两个分支是两个不同的版本,具有不同的提交历史
Git :fatal: refusing to merge unrelated histories
//使用如下命令其强制合并
git pull origin master --allow-unrelated-histories
如果还有问题,出现合并冲突之类的
删除本地仓库中的.git文件 重新clone新仓库到新目录,将代码文件和.git文件移动到旧的本地仓库中
分支管理
git push origin --delete branchname 删除远程分支
git checkout branchname 切换分支
git branch -D branchname 删除本地分支
git checkout -b branchname 在当前分支基础上新建分支
git push --set-upstream origin branchname 将新建的本地分支推送到远程并关联
git merge branchname 合并指定名称的分支到当前分支
拉取所有远程分支
git clone只能clone远程库的master分支,无法clone所有分支,解决办法如下:
找一个干净目录,假设是git_work
cd git_work
git clone http://myrepo.xxx.com/project/.git ,这样在git_work目录下得到一个project子目录
cd project
git branch -a,列出所有分支名称如下:
remotes/origin/dev
remotes/origin/release
git checkout -b dev origin/dev,作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支
git checkout -b release origin/release,作用参见上一步解释
git checkout dev,切换回dev分支,并开始开发。
git tag 列出所有tag
git tag -a 20190815 -m "注释" f8a5b56af1e962744d3dbecb19d971496715b260
指定commit 打标签
git show xxx 查看指定名称tag
git push origin --tags 推送本地所有tag
git push origin [tagName] 推送单个tag
git clone --branch [tags标签] [git地址] 拉去指定tag的项目
git clone -b 标签名称 --depth=1 git地址 拉去指定tag的项目 --depth 表示克隆深度, 1 表示只克隆最新的版本. 因为如果项目迭代的版本很多, 克隆会很慢
强制回退到制定版本
git log 查看日志,找到你要回退的版本查看commit 编号
git reset --hard commit编号 回退到指定版本
git push -f -u origin master 强制提交到master分支,注意保存版本代码,回退之后无法恢复,master分支可以替换成你要回退的远程分支
注意多个本地仓库时,都需要回退版本。比如你开发环境回退到xxx然后推送到远程仓库,此时,要在生成和测试环境上同意做回退操作保持和远程仓库一致,才能继续更新。
删除文件或目录
#--cached不会把本地的dirname删除
git rm -r --cached dirname
git commit -m 'delete dir'
git push -u origin master
将被.gitignore文件所忽略的文件从版本库中删除
git rm -r --cached .
git add .
git commit
git push -u origin master
空目录内创建.gitkeep文件保证目录被纳入版本管理
使用git在本地新建一个分支后,需要做远程分支关联。如果没有关联,git会在下面的操作中提示你显示的添加关联。
关联目的是在执行git pull, git push操作时就不需要指定对应的远程分支,你只要没有显示指定,git pull的时候,就会提示你。
git branch --set-upstream-to=origin/remote_branch your_branch
其中,origin/remote_branch是你本地分支对应的远程分支;your_branch是你当前的本地分支
git config advice.objectNameWarning false 待完善
其它命令
git symbolic-ref --short -q HEAD 打印当前分支名称,shell脚本用的上
git submodul
Git工作流
git flow
维护两个长期分支:主分支master/main和开发分支devleop
其它根据具体情况使用短期分支,功能分支,热修复分支
github flow
按版本开发,持续发布,向上合并,最新版本都合并到master/main,其它都是历史版本的分支
github开源项目都使用这个工作流
公司业务适合小团队中小型项目,后端项目,web前端项目,在自己服务器上运行能热更新的 ,不需要提交应用商店审核的
master分支根据功能和时间打tag,方便出现问题实现线上回滚
gitlab flow
Git flow 与 Github flow 的综合。它吸取了两者的优点,既有适应不同开发环境的弹性,又有单一主分支的简单和便利。它是 Gitlab.com 推荐的做法
对于”持续发布”的项目,它建议在master分支以外,再建立不同的环境分支。比如,”开发环境”的分支是master,”预发环境”的分支是pre-production,”生产环境”的分支是production。
开发分支是预发分支的”上游”,预发分支又是生产分支的”上游”。代码的变化,必须由”上游”向”下游”发展。比如,生产环境出现了bug,这时就要新建一个功能分支,先把它合并到master,确认没有问题,再cherry-pick到pre-production,这一步也没有问题,才进入production。
只有紧急情况,才允许跳过上游,直接合并到下游分支。
适合专业团队大型项目,需要提交商店审核的如ios应用和安卓鸿蒙项目
FAQ
1错误信息
warning: Pulling without specifying how to reconcile divergent branches is
discouraged. You can squelch this message by running one of the following
commands sometime before your next pull:
git config pull.rebase false # merge (the default strategy)
git config pull.rebase true # rebase
git config pull.ff only # fast-forward only
You can replace "git config" with "git config --global" to set a default
preference for all repositories. You can also pass --rebase, --no-rebase,
or --ff-only on the command line to override the configured default per
invocation.
解决方案
git config --global pull.ff only
指令参考
上述文件转自EASY微博