git 学习删除某次提交

cmd里的快捷键

ctrl+a : 跳到开头
ctrl+e : 跳到结尾
which vi  查看vi这么命令在哪个目录下
>> /uer/bin/vi 
git log 太多了看不完, 空格 往下看    q退出  ctrl+f往后走,  ctrl+d 往前走
mkdir a && cd -  创建并进入啊目录
vim下 
:4,7d 4到7行删除
:5d 第五行删除

丢弃某个文件的本地修改

git chekcout -- a.txt'

从暂存区撤回某次提交

git add hello.py  # 把本地修改加入暂存区
git reset HEAD hello.py # 从暂存区撤回来,但是本地保存了他的修改
git chekcout -- hello.py # 撤回之后用git checkout -- file 丢弃本地的修改
git tag -a v0.1 -m '新增标签v0.1'
git tags

git diff 的使用



HEAD里面的,白色的表示公有的,红色-表示,HEAD比HEAD少了一行



git如何彻底删除一个提交?

① 首先确保所有分支都没有引用该提交,包括HEAD也不指向这个提交。
② 然后 git reflog expire --expire=now --all (这会清除分支变更历史)
③ 然后 git gc --prune=now (不用调整时间,加上--prune=now命令即可)

作者:Intopass
链接:https://www.zhihu.com/question/36165419/answer/66222295

git常用命令

git config --global user.name "ty1539"
git config --global user.email 'ty1539@qq.com'
git config -- list 查看所有的配置
git reset HEAD readme.txt  将最近一次提交的readme.txt恢复到暂存区,然后将暂存区恢复成先前的状态
git reset HEAD  将最近一次提交到git仓库的文件恢复到暂存区,然后将暂存区恢复成先前的状态 
  • Git的工作流程一般是:
    在工作目录中添加、修改文件 [已修改(modified)] git add . (将需要进行版本管理的文件放入暂存区域 ) >> [已暂存(staged)] git commit -m '说明' (将暂存区域的文件提交到Git仓库 ) >> 已提交(committed)


reset和checkout

git reset HEAD~ 回到上一个暂存区 git reset HEAD~3 回到上3个暂存区

git reset HEAD 将最近一次提交到git仓库的文件恢复到暂存区,然后将暂存区恢复成先前的状态

如果本地修改了,某个以提交到仓库的文件,用 git checkout -- filename 用仓库中的覆盖掉本地的, 即放弃本地的修改,要慎用

git diff

  • git diff commit_id1 commit_id2 // 比较2个已提交的
  • git diff 比较工作区和暂存区
  • git diff HEAD 比较最新提交的和当前的
  • git diff --cached 比较暂存区的仓库
  • git diff --cached commit_id2 比较暂存区的仓库的

git checkout -- filename // 丢弃工作区中的修改, 丢弃掉相对于暂存区中最后一次添加的文件内容所做的变更
git reset HEAD -- filename // 将之前添加到暂存区(stage,index)的内容,从暂存区移除到工作区
git rebase -i master
git commit --amend #修改提交声明
修改文件, git add 之后
git commit --amend -m '新的提交说明' #针对有乱码的提交声明 ,就把修改的文件重新提交到上一次了

git branch -m master master2 // 分支master改名为master2

git log -p 展开显示每次提交的内容差异
git log --pretty=format:"%h-%an,%ar:%s"
git log --stat 仅显示简要的增改行数统计
git log --pretty=oneline 显示4条
git log -4 显示4条
git commit --amend -m '更新的提交提示'
git rm 要删除的文件名
git rm -f 要删除的文件名 # 当工作区和暂存区不一样是,-f 暴力删除

git mv 旧文件名 新文件名
git rm --cached test.py // 从暂存区删除
git branch feature // 创建一个名为feature 的分支
git log --decorate // 查看当前用户的分支引用
git checkout feature // 切换到feature分支
git log --decorate --oneline --graph --all // 查看分支 --


checkout









.gitignore

git stash用法

git checkout 只有2个分支在同一个commit_id节点才可以在改动到一半切换过去,否则不能
git stash 保存此刻状态,会自动生成stash_id 如 stash@{0}: WIP on test: 5c97f3e 05_新增c1
git stash save '保存说明'
git stash list ; 有2条保存记录了stash@{0}:
On test: 新增gitstash
stash@{1}: WIP on test: 5c97f3e 05_新增c1
git pop 将临时保存的最近一条状态取出来删除
git stash list ; 列出所有的保存状态 只有有第一条保存记录了git stash list ; 有2条保存记录了stash@{0}:
git stash apply 进入之前保存的stash
$ git stash drop stash@{1} // 删除指定的stash
fatal: Log for 'stash' only has 1 entries. //保错,没有第二条

Administrator@cpo-it001 MINGW64 /y/GitProject/Project_6 (test)
$ git stash drop stash@{0}
Dropped stash@{0} (60e344c1dc884cd087aeb0e045429936aea4d4c2) // 成功删除了

Administrator@cpo-it001 MINGW64 /y/GitProject/Project_6 (test)
$ git stash list

git stash apply (stash内容并不删除,需要通过git stash drop stash@{0}手动删除
git stash pop 删除的同时也将stash内容删除
git stash apply stash@{0}

git blame

$  git blame a
^773a33e (ty1539            2021-03-16 11:15:37 +0800 1) 1111111111111
5ed95c68 (ty1539            2021-03-16 11:25:06 +0800 2) 22222222222
dcbe10a1 (ty1539            2021-03-16 21:24:13 +0800 3) 新增gitstash
5f637fa1 (ty1539            2021-03-16 21:26:28 +0800 4) 333333333333333test
00000000 (Not Committed Yet 2021-03-16 22:05:47 +0800 5) gittag重标签

git diff

Administrator@cpo-it001 MINGW64 /y/GitProject/Project_6 (test)
$ echo 新增区别到a >> a

Administrator@cpo-it001 MINGW64 /y/GitProject/Project_6 (test)
$ git diff
diff --git a/a b/a
index 6c5b51d..e00cf18 100644
--- a/a
+++ b/a
@@ -2,3 +2,4 @@
22222222222
新增gitstash
333333333333333test
+新增区别到a
warning: LF will be replaced by CRLF in a.
The file will have its original line endings in your working directory.

git diff 比较暂存区和工作区的区别
--- 原始文件,暂存区
+++ 目标文件,工作区

git diff commit_id 比较特定的仓库和工作区的区别
git diff HEAD 比较最新提交的和工作区之间的差别

git diff --cached commit_id 比较暂存区和某次提交的仓库的区别
git diff --cached 比较暂存区和最新提交的仓库的区别

1.Gitflow
oado
2。基于Git分支的开发模型:
develop分支(频繁变化的一个分支)
test分支(供测试与产品等人员使用的一个分支,变化不是特别频繁)
master分支(生产发布分支,变化非常不频繁的一个分支)
bugfix(hotfix)分支(生产系统当中出现了紧急Bug,用于紧急修复的分支)

git remote show origin

https://blog.csdn.net/QQxiaoqiang1573/article/details/68074847
连接: https://blog.csdn.net/lianshaohua/article/details/108336436?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&dist_request_id=1328642.36984.16156889036565995&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control

git reset

  • git reset : 回滚到某次提交 // 就是当前工作目录中的相对于移动过去的commit_id ,把当前的变动没有add进暂存区,
  • git reset --soft:此次提交之后的修改会被退回到暂存区。 // 就是当前工作目录中的相对于移动过去的commit_id ,把当前的变动add进去了暂存区
  • git reset --hard:此次提交之后的修改不做任何保留,git status 查看工作区是没有记录的。 // 工作目录和暂存区都是commit_id里面的,很干净
  • git push origin HEAD --force // 强制推送到远端

注意:删除中间某次提交时最好不要用 git reset 回退远程库,因为之后其他人提交代码时用 git pull 也会把自己的本地仓库回退到之前的版本,容易出现差错进而增加不必要的工作量。

  1. git log // 查找要删除的前一次提交的 commit_id
  2. git rebase -i commit_id // 将 commit_id 替换成复制的值
  3. 进入 Vim 编辑模式,将要删除的 commit 前面的 pick 改成 drop
  4. 保存并退出 Vim

3. git revert // 把本次的提交内容恢复到上一次,之后,重新提交

  • git revert:放弃某次提交。
    - git revert 之前的提交仍会保留在 git log 中,而此次撤销会做为一次新的提交。
    - git revert -m:用于对 merge 节点的操作,-m 指定具体某个提交点。

3.1、撤销提交
要撤销中间某次提交时,使用 git revert 也是一个很好的选择:

  1. git log // 查找需要撤销的 commit_id
  2. git revert commit_id // 撤销这次提交
    如果这次提交是 merge 节点的话,则需要加上 -m 指令:
1. git revert commit_id -m 1 // 第一个提交点
2. // 手动解决冲突
3. git add -A
4. git commit -m ""
5. git revert commit_id -m 2 // 第二个提交点
6. // 重复 2,3,4
7. git push
写入自己的博客中才能记得长久
原文地址:https://www.cnblogs.com/heris/p/14534968.html