GIT

GIT 查看config配置信息

  • 查看系统config
git config --system --list
  • 查看当前用户配置信息
git config --global --list
  • 查看当前仓库配置信息
git config --local --list
  • 创建一个本地分支,并关联对应的远程分支
git checkout --track branchname

---  example

git checkout --track origin/dev_wcc

  • 清理workspace中未被git版本控制的文件,比如临时文件,构建出来的二进制文件。
git clean


-n 并不实际执行删除操作,只显示出将被清理的文件列表
-X 仅删除.gitignore里标记过的文件,那些既不被git版本控制,又不在.gitignore中的文件会被保留。

-d 参数表示连同目录一起删除

 -f 删除文件
  • 查看某个文件的修改历史
git log -- filename

git log  filename
  • 将某个文件回滚到指定版本
- 1查找文件的提交历史记录
git log --filename

- 2 回滚
- 2.1
- 第一种回滚方式
--- 利用 hash 回滚特定文件
git checkout 提交hash值  filename

- 第二种回滚方式

git reset 提交hash值 filename
- 2.2
--- 回滚后需要提交

git commit -am '回滚fileanme'

  • 解决冲突时,如果某些文件想直接使用对方的分支(即当前分支要merge的分支)的。
git checkout --theirs filename
  • 解决冲突时,如果某些文件想直接使用当前分支的。
git checkout --ours filename
  • git diff命令
- 工作目录 vs 暂存区
git diff <filename>

---查看文件在工作目录与暂存区的差别。如果还没 add 进暂存区,则查看文件自身修改前后的差别。也可查看和另一分支的区别。

git diff <branch> <filename>




- 暂存区 vs Git仓库
git diff --cached <filename>
--- 意义:表示查看已经 add 进暂存区但是尚未 commit 的内容同最新一次 commit 时的内容的差异。 也可以指定仓库版本:
git diff --cached <commit> <filename>



- 工作目录 vs Git仓库

git diff <commit> <filename>

意义:查看工作目录同Git仓库指定 commit 的内容的差异。
<commit>=HEAD 时:查看工作目录同最近一次 commit 的内容的差异。

-- Git仓库 vs Git仓库

git diff <commit> <commit>


  • 使用git status命令就可以看到你本次修改(新增、删除、修改)中涉及到哪些文件,同时也可以看到已经存入暂存区中发生修改变更的文件,便于检查具体修改了哪些文件,以免出现疏漏。
  • git commit

git commit -m用于提交暂存区的文件;git commit -am用于提交跟踪过的文件

所以在使用git commit -am命令时,是不会把untracked file(从未加入到缓存区中的文件,也可以理解为新增的文件)提交到版本库中的,这一点一定要注意。

  • git add

git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。

git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)

git add -A :是上面两个功能的合集(git add --all的缩写)

所以在我们日常开发中,提交代码时。可以使用

--- 直接把所有的修改(增,删,改)加入到缓存区
git add -A
--- 提交缓存区中的文件
git commit -m '提交信息'

或者

-- 将untracked file加入到缓存区了,但是不包括被删除文件
git add .
-- 将git add .不会提交的已删除文件 添加到了缓存区中,并且提交所有的修改(增,删,改)
git commit -am '提交信息'

git reset

除了在当前分支上操作,你还可以通过传入这些标记来修改你的缓存区或工作目录:

  • –soft – 缓存区和工作目录都不会被改变
  • –mixed – 默认选项。缓存区和你指定的提交同步,但工作目录不受影响
  • –hard – 缓存区和工作目录都同步到你指定的提交

Git 工作区、暂存区和版本库

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
    Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

git 撤销修改

git reset、git checkout 和 git revert 是你的 Git 工具箱中最有用的一些命令。它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文件。

提交层面
  • git reset

在提交层面上,reset 将一个分支的末端指向另一个提交。这可以用来移除当前分支的一些提交。比如,下面这两条命令让 hotfix 分支向后回退了两个提交。hotfix 分支末端的两个提交现在变成了悬挂提交。也就是说,下次 Git 执行垃圾回收的时候,这两个提交会被删除。换句话说,如果你想扔掉这两个提交,你可以这么做。

git reset --mixed HEAD 将你当前的改动从缓存区中移除,但是这些改动还留在工作目录中。另一方面,如果你想完全舍弃你没有提交(git push)的改动,你可以使用 git reset --hard HEAD。这是 git reset 最常用的两种用法。

当你传入 HEAD 以外的其他提交的时候要格外小心,因为 reset 操作会重写当前分支的历史。正如 rebase 黄金法则所说的,在公共分支上这样做可能会引起严重的后果。

git reset 会直接丢弃到被回退的提交

  • git checkout
git checkout hotfix

上面这个命令做的不过是将HEAD移到一个新的分支,然后更新工作目录。因为这可能会覆盖本地的修改,Git 强制你提交或者缓存工作目录中的所有更改,不然在 checkout 的时候这些更改都会丢失。和 git reset 不一样的是,git checkout 没有移动这些分支。

  • git revert

Revert 撤销一个提交的同时会创建一个新的提交。这是一个安全的方法,因为它不会重写提交历史。比如,下面的命令会找出倒数第二个提交,然后创建一个新的提交来撤销这些更改,然后把这个提交加入项目中。

相比 git reset,它不会改变现在的提交历史。因此,git revert 可以用在公共分支上,git reset 应该用在私有分支上。

你也可以把 git revert 当作撤销已经提交(git push)的更改,而 git reset HEAD 用来撤销没有提交(git push)的更改。

就像 git checkout 一样,git revert 也有可能会重写文件。所以,Git 会在你执行 revert 之前要求你提交或者缓存你工作目录中的更改。

git revert 并不会丢弃掉被回退的提交,而是向前创建一个新的提交(这个提交就得内容就是撤销回退的更改),所以使用git revert是可以在公共分支的,因为我们可以在git log里面依旧能找到那些被回退的提交。

文件层面的操作

git reset 和 git checkout 命令也接受文件路径作为参数。这时它的行为就大为不同了。它不会作用于整份提交,参数将它限制于特定文件。

  • git reset

当检测到文件路径时,git reset 将缓存区同步到你指定的那个提交。比如,下面这个命令会将倒数第二个提交中的 foo.py 加入到缓存区中,供下一个提交使用。

git reset HEAD~2 foo.py

和提交层面的 git reset 一样,通常我们使用HEAD而不是某个特定的提交。运行 git reset HEAD foo.py 会将当前的 foo.py 从缓存区中移除出去,而不会影响工作目录中对 foo.py 的更改。

  • git checkout

Checkout 一个文件和带文件路径 git reset 非常像,除了它更改的是工作目录而不是缓存区。不像提交层面的 checkout 命令,它不会移动 HEAD引用,也就是你不会切换到别的分支上去。

命令作用域常用情景
git reset提交层面在私有分支上舍弃一些没有提交的更改
git reset文件层面将文件从缓存区中移除
git checkout提交层面切换分支或查看旧版本
git checkout文件层面舍弃工作目录中的更改
git revert提交层面在公共分支上回滚更改
git revert文件层面(然而并没有)

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

  • git stash
New versions of git now have git stash --all which stashes all files, including untracked and ignored files.
git stash --include-untracked no longer touches ignored files (tested on git 2.16.2).

git stash --all

git stash --include-untracked

  • git pull

git pull =git fetch+ git merge

  • git tag

2、每次上线确保通过之后master分支记得打tag
命令:git tag “tag name”
git push origin --tags

取消追踪已追踪文件

有时候我们会把一些本不需要追踪的文件提交到 GIT仓库中(例如一开始并没有指定好gitignore文件),那么我们怎么取消追踪这些本不需要追踪的文件呢?
使用git rm --cached命令
这个命令就是移除掉暂存区和版本库中的文件(目录),不会影响工作区间,这些文件我们在工作区间还是需要使用的。

用删除文件,则使用

git rm --cached fliename

如果要删除目录及目录下的所有文件

git rm -r --cached directoryname

要加上-r 参数,循环删除掉目录下的所有文件,否则会报错

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值