git 使用心得

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xiaoma_bk/article/details/93474042

git 核心简介

  • 工作流:  工作区 ->暂存区 ->版本库

初始化:  git init(初始化本地仓库)->git add(工作区文件到暂存区)->git commit(暂存区到版本库,并生效)

远程仓库:git remot add -> git pull(拉去)->git push ->git clone

分支管理:git branch->git checkout ->git merge

标签管理:git tag->git push(标签只在本地起作用,需git push到远端)

标签:发布版本,设定标签,通过标签回滚版本

查看所有标签 git tag

创建标签 git tag name

指定提交信息 git tag -a name -m "comment"

删除标签 git tag -d name

标签发布 git push origin name

2.git 心得

1.git 子目录有 .git 无法 add 

  • 无论使用啥命令,都无法将文件夹下的某些文件添加进 Git 进行版本控制,Git 提示信息如下:
    后来经过艰难的搜索,终于发现原来是子文件夹下面含有 .git 文件夹,因此导致该子文件夹无法被 Git 跟踪,可以通过以下方法解决:
  • git rm --cached folder
  • git add folder
    其中 folder 为子文件夹。
     

2.远端比当前版本超前造成无法提交

   强制推送:

  •   git push origin HEAD -force

拉下来合并:

3.想修改上次提交的代码,做一次更完美的commit

  • git reset commitId,(注:不要带--hard)到上个版本
  • git stash,暂存修改
  • git push --force, 强制push,远程的最新的一次commit被删除
  • git stash pop,释放暂存的修改,开始修改代码
  • git add . -> git commit -m "massage" -> git push

总结:

  • git reset  commitId:本地文件没有变话,但是退回了  版本+id ,你可以add  commit 重新提交
  • git reset –-soft  commitId:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可;
  • git reset -–hard commitId:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉;

4.git 如何删除中间某个commit同时保留后面的commit

这种事情是不常遇到的,这里就是记录个变通方法,比如版本的提交如下,我要删掉commit-m这次的提交而保留后面的提交。

  1. 首先使用 git format-patch -(n-m) ,生成n-m个补丁文件 000(n-m)-commit-msg.patch, 
    000(n-m).patch是最后一次commit的补丁, 
    0001-commit-msg.patch是commit-m到commit-(m+1)的补丁。
  2. 使用git reset –hard commit-(m+1)退回到commit-(m+1)的版本,因为要删除commit-m,所以要在commit-(m-1)和commit-(m+1)之间做一次新的提交。
  3. 在 commit-(m+1)版本处使用git reset commit-(m-1),退回到 commit-(m-1)版本同时保留M+1版本的更改
  4. 由于回退时保留了修改,这里直接提交修改, git add -u
  5. git commit -m “从m-1到m+1的更改备注”,
  6. 提交后就回到了m+1的版本了
    然后就是打补丁,提交修改 
    patch -p1 < 0001-commit-msg.patch 
    git add -u
  7. git commit -m “commit-msg”
  8. 一级级的往后打补丁提交就好了,这是比较笨的办法,没办法啊,这种犯傻的事情也不多吧。

5.git  .gitignore 

配置语法

  • 以斜杠“/”开头表示目录;
  • 以星号“*”通配多个字符;
  • 以问号“?”通配单个字符
  • 以方括号“[]”包含单个字符的匹配列表;
  • 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录。

注意: git 对于 .gitignore配置文件是按行从上到下进行规则匹配的

规则 作用

  • /mtk 过滤整个文件夹下的 mtk
  • ./mtk 过滤当前文件夹下的 mtk文件夹
  • *.zip 过滤所有.zip文件
  • /mtk/do.c 过滤某个具体文件
  • !/mtk/one.txt 追踪(不过滤)某个具体文件

注意:如果你创建.gitignore文件之前就push了某一文件,那么即使你在.gitignore文件中写入过滤该文件的规则,该规则也不会起作用,git仍然会对该文件进行版本管理。

****.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的

  • git rm -r --cached .
  • git add .
  • git commit -m 'update .gitignore'

6.git 比较两个分支的差异

  • git diff branch1 branch2 --stat   //显示出所有有差异的文件列表
  • git diff branch1 branch2 具体文件路径   //显示指定文件的详细差异
  • git diff branch1 branch2                   //显示出所有有差异的文件的详细差异

猜你喜欢

转载自blog.csdn.net/xiaoma_bk/article/details/93474042