git 相关使用总结

简介

git是Linux之父Linus开发出来的用于分布式版本控制的系统软件, 我们项目就式用git来做版本管理的。

基本原理

u=3456711285,762623164&fm=26&gp=0.jpg

git流程图

  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库

 

分支管理

696683-20170303101941579-959672434.png

  • master:线上分支   预发环境测试通过后,运营/测试会将此分支代码发布到线上环境;
  • develop:开发分支   开发人员每天都需要拉取/提交的最新代码分支
  • release:测试分支/预发布分支  开发人员自测通过的bug或功能提交到此分支 发布测试环境 给测试人员测试 大公司一般测试环境和预发布环境是分开的,预发布的数据跟正式的数据库是共用的 这时测试环境测完了才合到预发布分支
  • feature:功能开发分支   开发人员基于dev分支创建的新功能开发分支,开发完成合并到develop  多个新功能可同时进行开发
  • hotfix:bug修复分支  基于dev或master分支创建的用于bug修复的分支  一般修复完要到release分支进行测试再发布到线上  若基于master修复的 可提交后使用cherry-pick进行复制到develop和release分支

常用命令

  • 初始化区(开发前准备 相关命令)----------------- 拉取远程仓、初始本地仓  保持本地仓和远程仓一致

     git config --global user.name  '用户名'  配置全局用户名

     git config --global user.email 'git账号'  配置全局用户账号

     git config --global  --unset user.xxx 删除全局配置

 

    git init 初始化git仓库

     git remote add origin git@server-name:path/project-name.git 关联远程仓

     git remote rm origin 删除已关联的远程仓库

     git remote set-url origin  git@xxx:xxxxx.git  更新关联的远程仓库

     git remote -v   查看远程关联仓库

 

     git clone  git@server-name:path/project-name.git  project-name 克隆远程仓库代码到本地

 

  • 开发区(开发过程中 常用命令)-------------------- 本地仓操作、推送远程仓 实现文件最新修改更新至远程仓

      git branch  查看分支(本地)

git branch -a   查看分支(本地+远程)

git branch <name> 新建本地分支

git checkout <name> / git switch <name>  切换分支 (如果暂存区有内容会切换到新分支、但是commit的不会被移过去)

git checkout -b <name> / git switch -c <name>   创建+切换

      git checkout -b <name> origin/<name>  创建并切换新分支且与远程分支建立联系

git branch -d <name>   删除某分支

git branch -D <name>   强制删除某分支

      git branch |grep 'xxx' |xarhs git branch -D  批量删除分支

      git merge <name>    合并分支到当前分支

     git remote update origin -p  /  git remote update origin --prune 刷新远程仓库分支(清理无效远程追踪分支)

 

      git add <file> 添加到暂存区

     git commit -m <message> 提交到本地仓库

      git branch --set-upstream-to <branch-name> origin/<branch-name> /

      git branch --set-upstream-to=origin/<branch-name> <branch-name> 本地分支和远程分支建立联系(第一次推)

    git push    本地仓推送到远程仓

     git push  --set-upstream origin test / git push  -u origin test  推送远程库(第一次推送,要建立联系)

      git push origin HEAD --force 强制推送更新远程仓

      git merge  --no-ff -m 'merge with no-ff' dev  合并分支到当前分支(禁用Fast forward模式)

      git rebase 整理提交历史分叉线为一条直线(但分支提交被修改了 不建议使用)

 

      git status   查看工作区状态

     git diff  查看修改内容

git log   查看提交历史,回退版本可用

git log --oneline  查看历史记录的紧凑简洁版本

git reflog  查看命令历史,重置回退版本操作可用

 

git checkout -- file  丢弃工作区的修改 (git add 之前用)

git reset HEAD <file> 丢弃暂存区的修改(git add 之后git commit之前用)

git reset --soft HEAD^  取消上一步commit (commit内容不会删除 会在暂存区可再次提交)

git reset --hard commit_id  版本穿梭  (git commit之后用,也可配合强制推送使用实现回退远程仓)

git reset --hard HEAD^  本地回退上一个commit

git reset --hard HEAD~3 本地回退3个commit之前的版本,以此类推,回退到n之前

git rm file  删除文件(暂存区和目录都会删掉)

 

git satsh  暂存工作现场代码

git stash list   查看储藏的代码列表

git stash apply 取出最新储存的代码(不会删除)

git stash drop 删除最新储存的代码

git stash pop 取出+删除最新储存的代码

git stash clear  清空储藏区

 

  • 维护区(开发完成之后  常用命令)-----------------  拉取远程区  修复更新远程区

       git tag <name>   打标签(默认为HEAD)

       git tag <name> commitId   给某一次commit打标签

       git tag -a <name> -m  '说明文字--' 打带说明的标签(用-a指定标签名,-m指定说明文字)

       git tag   查看所有标签

       git show <tagname>  查看某个标签

      git tag -d <name>  删除标签

      git push origin <tagname> 推送某标签到远程

       git push origin --tags  一次性推送未推送的本地标签到远程

 

      git cherry-pick commitId  复制特定提交到当前分支

 

常见问题及处理

Q:版本回退

A: 先回退本地仓库代码,再推送到远程更新---->先git reset --hard HEAD~3  再 git push origin HEAD --force

 

Q:删除远程标签

A:先删除本地标签 再推送远程删除---> 先git tag -d <tagname>     再git push origin :refs/tags/<tagname

 

Q: 拉取别人代码分支合并后 不小心删除了别人上传的文件 再拉取提示already-up 怎么办

A: 回滚代码 重新拉取

 

Q: git pull遇到错误:error: Your local changes to the following files would be overwritten by merge

A:原因是本地有未提交代码  

    解决方案:

    ①stash保存 再拉取  stash apply取出 ;

    ② 如果本地代码不想要 可以直接 git reset --hard 再拉取

 

Q: git push后出现 src refspec dev does not match any

A: 问题应该是出在了本地分支和远程当前分支不匹配上  新建切换分支 重新提交

 

Q:git 使用出现MERGING状态 无法提交

A:出现原因 是本地git 和远程 git版本不一致 有冲突

   三种解决方法:

   1.解决冲突,删除代码中矛盾的代码,然后上传或者下拉

   2.回退git reset --hard head到操作前的状态 (一般使用这条即可 但是使用前要记得备份一下本地修改代码)

   3.discard删除下载的,或者上传的代码,然后分别check out两个分支

 

Q: 不小心把本地的某些文件上传到远程仓库/想要删除远程仓库中的文件

A:使用git rm --cached filename 命令 取消对该文件的追踪  git下次提交就不会提交这个文件 从而远程库的该文件也会被删除

 

Q:每次git push 都会要输入用户名、密码

A:

step 1:打开git bash  生成公钥     ssh-keygen -t rsa -C "xxxxx@xxxxx.com"  三次回车

step 2:查看已生成的公钥   cat ~/.ssh/id_rsa.pub

step3:复制已生成的公钥添加到 git 服务器  并测试 ssh 是否能够连接成功  ssh -T git@github.com

step4:使用 ssh 协议 clone 远程仓库 或者 如果已经用 https 协议 clone 到本地了,那么就重新设置远程仓库

git remote set-url origin git@xxx.com:xxx/xxx.git

 

Q:git不允许提交空文件夹

A:当前目录 添加一个 .gitkeep 文件

 

Q: 如何修改最后一次提交 修订提交历史

A: git commit --amend   会打开编辑器  允许你修改commit 提交信息  / 或者新加修改的文件提交

 

Q:分支名称出现拼写错误

A:  

  1. 没有push ------->  git branch -m future-brunch feature-branch;
  2. 已经push 到远程分支  ----->

       git branch -m future-brunch feature-branch; // 改名

       git push origin --delete future-brunch   // 删除远程错误名分支

       git push origin feature-branch   // 重新推送

 

Q: 删除远程分支

A: git branch -d <name>  

     git push origin --delete <name>

 

Q: git push 或者  git clone时报错:RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054

A: git上传文件有限制文件大小   当前上传文件超出git限制 

       处理方案: git config http.postBuffer 524288000

 

Q: git分支如何强制覆盖

A:两个方案--

   方案Ⅰ.git push origin test:master -f           //将test分支强制(-f)推送到主分支master

   方案Ⅱ.

      git checkout master                          //将当前分支切换到主分支

      git reset --hard test                            //将主分支重置为test分支

      git push origin master -f             //将重置后的master分支强制推送到远程仓库

 

名词备注

  • 版本控制:开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的技术。('后悔药')
  • 分布式:版本控制的一种方式,中心服务器控制最新版本代码,每个开发者自己还有一个本地仓库,开发过程中先把代码提交到本地再推送到服务器上。 如下图:

      image.png

  • 集中式:版本库放在中央服务器上,当需要的时候从中央服务器取得最新版本,修改完毕之后上传到中央服务器。如下图:

     image.png

  • 其他常见的版本控制工具:SVN、CVS (三者的共同点是:免费开源;不同点是:git是分布式  后者是集中式;git不需要联网,后者需要联网)

 

  • Fast forward模式:git合并分支的默认模式,删除分支会丢掉该分支信息;使用 --no-ff则会生成一条新的commit记录,会禁用该模式
  • 知识点:Git Reference简写为refs,是管理本地分支的

                  1)本地分支的Reference格式:refs/heads/<local_branch_name>

                    如refs/heads/master,在保证唯一的情况下可以简写为master

                  2)远程追踪分支的Reference格式:refs/remotes/ <remote_repository>/<remote_branch_name>

                Reference Specification简称refspec    在执行push或fetch操作时,refspec用以给出本地Ref和远程Ref之间的映射关系

 

参考文献

1.廖雪峰的git教程:https://www.liaoxuefeng.com/wiki/896043488029600

2.开发工具之git: https://www.cnblogs.com/wangxinwen/p/9836936.html

3.国外友人总结常用命令: https://gitee.com/liaoxuefeng/learn-java/raw/master/teach/git-cheatsheet.pdf

<think>首先,用户的问题是:"我想查找git常用使用方式的总结内容 请问git常用使用方式的总结"。这是一个关于Git常用使用方式的总结查询。 用户提供了几个引用: - 引用[1]:涉及Git的基本操作,如clone, add, commit, push- 引用[2]:讨论放弃修改和缓存代码的命令,如checkout, reset。 - 引用[3]:关于stash清除、日志查看和提交统计的命令。 - 引用[4]:解释push操作失败时的处理,建议先pull。 用户指示中说:"上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。" 但在消息中,用户上一次的问题就是这个问题本身,没有之前的对话历史。所以,我应该基于当前查询和提供的引用来回答。 系统级指令要求: - 所有行内数学表达式使用$...$格式(但Git命令没有数学表达式,所以可能不适用)。 - 独立公式使用$$...$$格式(同样不适用)。 - LaTeX语法正确(不适用)。 - 使用中文回答。 - 生成相关问题。 - 引用的段落末尾添加引用标识,如[^1]。 回答结构: - 结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 用户想要Git常用使用方式的总结。我应该组织一个全面的总结,基于常见Git命令和最佳实践。 关键Git命令总结: 1. **克隆仓库**:`git clone <url>` – 克隆远程仓库到本地。 2. **添加更改**:`git add <file>` 或 `git add .` 或 `git add -A` – 添加文件到暂存区。 3. **提交更改**:`git commit -m "message"` – 提交暂存区的更改。 4. **推送更改**:`git push` – 推送本地提交到远程仓库。 5. **拉取更改**:`git pull` – 拉取远程更改并合并到本地(相当于`git fetch` followed by `git merge`)。 6. **分支操作**: - 创建分支:`git branch <branch-name>` - 切换分支:`git checkout <branch-name>` 或 `git switch <branch-name>` - 合并分支:`git merge <branch-name>` 7. **放弃更改**: - 未暂存的更改:`git checkout -- <file>` 或 `git checkout .` - 已暂存的更改:`git reset HEAD <file>` 或 `git reset HEAD .` - 已提交的更改:`git reset --hard HEAD^` 或 `git reset --hard <commit-id>` 8. **查看日志**:`git log` – 查看提交历史。可以加选项如`--oneline`, `--graph`, `--all`, `--since`, `--author`等。 9. **储藏更改**:`git stash` – 临时保存未提交的更改。`git stash apply` 恢复。 10. **其他常用命令**: - 状态查看:`git status` - 差异查看:`git diff` - 远程管理:`git remote -v` - 标签:`git tag` 我应该参考用户提供的引用: - 引用[1] 提到 clone, add, commit, push- 引用[2] 提到放弃修改的命令。 - 引用[3] 提到 stash clear, log命令,统计提交。 - 引用[4] 提到 push失败时先pull。 在回答中,当我使用这些信息时,在段落末尾添加引用标识。 组织回答: 1. **引言**:简要介绍Git和常用操作。 2. **基本工作流**:描述日常使用命令(clone, add, commit, push, pull)。 3. **撤销更改**:解释如何处理放弃修改(参考引用[2])。 4. **查看历史**:日志查看和统计(参考引用[3])。 5. **分支管理**:创建、切换、合并分支。 6. **储藏更改**:stash使用(参考引用[3])。 7. **推送注意事项**:当push失败时的处理(参考引用[4])。 8. **其他提示**:简短的其他命令。 最后,生成相关问题。 使用中文回答。 确保结构清晰:使用标题或列表来组织。 由于Markdown支持,我可以使用列表和代码块来显示命令。 示例中的代码块是用的三重反引号,我应该类似。 例如: ```bash git clone <url> ``` 引用格式:在引用内容的末尾加[^1]。 生成相关问题:至少3个相关问题,如示例中的"相关问题"部分。 相关问题示例: 1. Git如何解决合并冲突? 2. Git的rebase和merge有什么区别? 3. 如何配置Git别名提高效率? 现在,构建回答。 </think>### Git常用使用方式总结 Git是一个分布式版本控制系统,广泛用于协作开发和代码管理。以下是Git常用使用方式的全面总结,基于日常开发流程组织,帮助您高效使用Git。总结内容包括基本命令、撤销更改、日志查看、分支管理等核心操作。参考了您提供的引用内容,我将关键点融入其中,并在相关段落末尾添加引用标识[^1][^2][^3][^4]。 #### 1. **基本工作流(日常开发的核心步骤)** - **克隆仓库**:从远程仓库复制到本地。常用命令行示例: ```bash git clone <远程仓库地址> # 克隆远程仓库到本地目录[^1] ``` - **添加文件到暂存区**:准备提交的更改。使用`git add`跟踪新文件或修改: ```bash git add <文件名> # 添加指定文件 git add . # 添加当前目录所有更改(包括新文件和修改)[^1] git add -A # 添加所有更改(包括删除的文件)[^1] ``` - **提交更改**:将暂存区的更改保存到本地仓库,并添加提交消息: ```bash git commit -m "更新内容" # 提交更改,消息描述修改内容[^1] ``` - **推送更改**:将本地提交同步到远程仓库: ```bash git push # 推送当前分支到远程仓库[^1] ``` - **注意事项**:如果推送失败(如他人先更新了代码),先运行`git pull`拉取远端变更并合并后再推送[^4]。 - **拉取更新**:获取远程仓库最新更改并合并到本地: ```bash git pull # 相当于 git fetch + git merge[^4] ``` #### 2. **撤销更改(处理错误或放弃修改)** - **未使用`git add`缓存代码**:放弃工作区的修改: ```bash git checkout -- <文件名> # 放弃指定文件的修改[^2] git checkout . # 放弃所有文件修改[^2] ``` - **已使用`git add`缓存代码**:移除暂存区的更改: ```bash git reset HEAD <文件名> # 放弃指定文件的缓存(文件仍保留在工作区)[^2] git reset HEAD . # 放弃所有缓存文件[^2] ``` - **已提交代码**:回退到历史版本: ```bash git reset --hard HEAD^ # 回退到上一个提交状态[^2] git reset --hard <commit-id> # 回退到特定提交ID的版本[^2] ``` #### 3. **查看历史与日志(分析提交记录)** - **基本日志查看**: ```bash git log # 显示完整提交历史[^3] git log --oneline # 简洁显示(每行一个提交)[^3] git log --graph --all # 图形化显示分支结构[^3] ``` - **过滤日志**:按时间、作者或文件查询: ```bash git log --since="3 days ago" # 查看最近三天提交[^3] git log --author="用户名" # 查看特定作者的提交[^3] git log <文件名> # 查看指定文件的变更历史[^3] ``` - **统计提交**:分析团队贡献: ```bash git shortlog -s -n --since="1 week ago" # 统计最近一周每人提交次数[^3] ``` #### 4. **分支管理(处理多任务或协作)** - **创建与切换分支**: ```bash git branch <新分支名> # 创建新分支 git checkout <分支名> # 切换到指定分支 git switch <分支名> # 新版本推荐方式(更安全) ``` - **合并分支**:将其他分支合并到当前分支: ```bash git merge <分支名> # 合并指定分支的更改 ``` - **储藏更改**:临时保存未提交的工作(例如切换分支前): ```bash git stash # 储藏当前更改 git stash apply # 恢复最近储藏的内容 git stash clear # 清空所有储藏项目[^3] ``` #### 5. **其他常用命令** - **状态检查**:`git status` – 查看工作区和暂存区状态。 - **差异比较**:`git diff` – 显示未暂存的更改;`git diff --staged` – 显示已暂存的更改。 - **远程仓库管理**:`git remote -v` – 列出所有远程仓库地址。 - **标签操作**:`git tag <标签名>` – 为当前提交打标签(用于版本发布)。 #### 最佳实践提示 - **推送前先拉取**:避免冲突,养成`git pull`习惯后再`git push`[^4]。 - **定期提交**:小步提交(commit)能减少冲突风险。 - **使用`.gitignore`**:忽略无需跟踪的文件(如临时文件)。 通过以上总结,您可以覆盖Git日常使用的90%场景。如需深入学习,推荐Git官方文档或在线教程。 相关问题: 1. Git如何处理合并冲突? 2. Git的rebase和merge有什么区别? 3. 如何配置Git别名以提高命令效率?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值