ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

【git操作(适合新手看)】

【git操作(适合新手看)】 不知道各位刚工作时是否和我一样对git操作有很大困惑关于各种命令就是分不清尤其是在代码提交失败之后如何回退暂存区如何回退本地仓库如果上次提交的代码有问题怎么修改后继续上一次提交避免abandon的操作网上的教程很多但是我总觉得不针对我这种完全不会的菜鸟。最近的两周在多次提交代码“成功”后我终于对git的操作有了一点理解相信能帮到和我一样刚入职的小白。一、git的工作区、暂存区、版本库菜鸟教程上有一句话叫git的工作就是创建和保存你项目的快照及与之后的快照进行对比。比如常用的git add、git commit等操作本质就是保存这些“快照”。工作区就是你在电脑里能看到的目录。暂存区英文名stage或index。一般存放在.git目录下的index文件.git/index中所以我们把暂存区有时也叫索引index。版本库工作区有一个隐藏目录.git这个不算工作区而是Git的版本库也就是本地仓库。远程仓库也就是git的远端仓库最终代码合入的地方。下图为四个区之间的关系。二、git提交常用操作1.git status# 查看上次提交后是否有对文件进行再次修改2.git add .#将工作区的修改同步到暂存区3.git commit -m 内容#将暂存区的修改同步到本地仓库4.git pull --rebase# 同步远端最新代码并合并本地版本5.git push origin HEAD:refs/for/master#上传远端代码并合并master为你代码的分支以上是你提交代码可能会用到的常规操作如果是第一次提交代码那么顺序就是1 2 3 4 5依次执行。6.git commit --amend#合并上一次的commit可以避免在gerrit上abandon如果你已经执行了操作5将代码提交到了远端仓库但是又发现你的代码有问题想修改重新提交可以利用操作6。先修改你的错误代码修改完毕后执行的步骤为为1 2 6 4 5其中执行git commit --amend后直接:q退出即可。7.git diff#查看工作区和暂存区的区别8.git branch#查看分支git branch -r#查看远端分支git branch -v#查看本地分支git branch -a#查看所有分支9.git checkout branch#切换分支三、git回退操作说到回退操作不得不提的一个命令就是git reset这个命令可以说是各种回退操作都可能用到它的命令语法格式如下git reset [--soft | --mixed | --hard] [HEAD]–mixed为默认可以不用带该参数用于重置暂存区的文件和上一次的提交保持一致工作区内容保持不变。git reset --soft暂存区回退到某个版本 只回退了commit的信息 。如果还要提交直接commit即可。git reset --soft HEAD^ #从暂存区撤销最近一次的提交保留本地工作区被修改的内容git reset --soft XXX : #从暂存区回退到XXX版本版本号可以通过git log查询这里特别讲一下**–hard**参数会撤销工作区中所有未提交的修改内容将暂存区和工作区全部回退到上一个版本并删除之前所有的信息提交所以慎重使用git reset --hard。实例git reset --hard HEAD~3# 回退上上上一个版本git reset –hard bae128# 回退到某个版本回退点之前的所有信息。git reset --hard origin/master# 将本地的状态回退到和远程的一样关于HEAD参数的说明:HEAD表示当前版本HEAD^上一个版本HEAD^^上上一个版本HEAD^^^上上上一个版本以此类推…可以使用 数字表示HEAD~0表示当前版本HEAD~1上一个版本HEAD^2上上一个版本HEAD^3上上上一个版本以此类推…接下来来具体举例一下可能遇到的回退情况。1.如果你只是在编辑器里修改了文件还没有执行git add .也就是文件修改还在工作区没有保存到暂存区可以用git checkout .或者git reset --hard来进行撤销的操作。2.如果你已经执行了git add .但是还没执行git commit -m 内容即你的代码只是同步到了暂存区还没有推送到本地仓库这时候你发现有错误想要撤销你可以执行git reset HEAD操作执行之后你的暂存区目录会回退到你执行git add .之前的版本之后再执行git checkout .你的工作区的修改也就被回退了。如果你想直接将暂存区和工作区全部回退可以直接执行git reset --hard。3.如果你已经执行了git commit -m 内容即你已经把代码推送到本地仓库这个时候想把本地仓库回退怎么办可以执行git reset --hard origin/master相比较之前多了一个origin/master参数这个参数代表远端仓库因为本地仓库被污染了所以你只需要从远端仓库取回你的代码即可。4.很不幸手实在是太快了你已经执行了git push这时你的代码已经进入远程仓库。如果你想恢复的话还好由于你的本地仓库和远程仓库是等价的你只需要先恢复本地仓库再强制push到远程仓库就好了git reset --hard HEAD^、git push f(这种情况我很少用哈)。四、git cherry pick操作场景.我在分支B上提交了代码但是现在我想把分支B的代码提交到分支A上可是这个代码有问题比如漏了一两行没提交而且这个提交又是几千行重新提交很麻烦怎么办?1.先找到初次在分支B上提交的那一次链接cherry pick到分支A。2.在当前已经提交到分支A的这个提交上找到change Number这个数字实际上就是链接。3.拉取该change的patchset 14.正常提交例Change‑Number273921→ refs/changes/21/273921/1 git fetch origin refs/changes/21/273921/1git checkout FETCH_HEAD git add.git commit--amend git push origin HEAD:refs/for/分支名
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进