Git 实用操作:重写 Commit 历史】的更多相关文章

有的时候,改完代码提交 commit 后发现写得实在太烂了,连自己的都看不下去,与其修改它还不如丢弃重写.怎么操作呢? 使用 reset 撤销 如果是最近提交的 commit 要丢弃重写可以用 reset 来操作.比如你刚写了一个 commit: 写完回头看了看,你觉得不行这得重新写.那么你可以用 reset --hard 来撤销这条 commit. git reset --hard HEAD^ HEAD^ 表示往回数一个位置的 commit`,上篇刚说过. 因为你要撤销最新的一个 commit…
1.建空目录 mkdir e:\gg 2.把该目录变成仓库 git init   //发现当前目录下多了一个.git 3.新建文件readme.txt 4.添加文件到仓库  git add readme.txt     //添加到暂存区 5.文件提交到仓库       git commit -m "wrote a readme file"  //后面是日志,提交暂存区的内容 6.查看修改的内容 git diff readme.txt 7.查看历史记录   gig log (--pret…
当我们修改完代码,提交了一个 commit,然后发现改错了,怎么修正?下面分两种情况来讨论:修正最近一次提交,和修正历史多个提交. 修正最近一次提交 如果发现刚刚提交的内容有错误,当场再修改一下再提交一个新 commit 不就可以么?可以是可以,不过还有一个更加优雅和简单的解决方法: git commit --amend "amend" 是"修正"的意思.在提交时,如果加上 --amend 参数,Git 不会在当前 commit 上增加 commit,而是会把当前…
查看某文件的某些行的变化历史: $ git log --pretty=short -u -L 2003,2005:Executor.cpp http://stackoverflow.com/questions/8435343/retrieve-the-commit-log-for-a-specific-line-in-a-file…
提取多次提交的文件 git archive --format=zip HEAD `git diff --name-only 较早的提交ID 较晚的提交ID` > diff.zip…
[TOC] 修改commit历史的前提 修改历史的提交是可能有风险的,是否有风险取决于commit是否已经推送远程分支,未推送,无风险,如果已推送,就千万不要修改commit了. 修改commit历史,不是在原有commit结点上修改,而是用一个新的结点替换原来结点,所以,修改后commit id是不样的. 所以修改commit历史的前提是,提交未推送远程仓库!提交未推送远程仓库!提交未推送远程仓库!,重要的事情说三遍. 修改最近的一次提交 修改最近的一次提交非常简单,通过git commit…
参考: 找回Git中丢失的Commit Git误操作 git reset强制回滚 恢复commit方法 使用Git时,常有误操作,在Commit之后又执行了git reset --hard HEAD强制回滚本地记录以及文件到服务器版本,导致本地做的修改全部恢复到Git当前分支的服务器版本,同时Commmit记录也消失了. 此时解决方法是通过git reflog来查看先前记录并恢复: git reflog会记录所有HEAD的历史,也就是说当你做 reset,checkout等操作的时候,这些操作会…
为什么要美化commit历史? 答:假如一个分支的多次意义相近的 commit,会把整个提交历史搞得很混乱, 此时可以将几个commit 合并为一个 commit,以美化整个 commit 历史. 怎么操作? 答: ①git log 看一下历史提交. ② git rebase -i HEAD~5 对最近的 5 个 commit 进行 rebase 操作(假如你想合并这5个commit),出现下面的编辑页面,改pick为fixup . ③git rebase --continue 继续. ④ gi…
如果一个文件被删除了,可以使用切换版本号进行恢复.恢复方法: 先确定需要恢复的文件要恢复成哪一个历史版本(commit),假设那个版本号是: commit_id,那么 git checkout commit_id -- path_to_file 就可以恢复. 还有一个方法是: 你直接从本地把文件checkout出来就可以了,用不着从远程服务器上pull下来,因为,所以的历史版本你的本地都有的. 具体做法 git checkout file 同时恢复多个被删除的文件. 3.在本地仓库添加一个远程仓…
Git 实用基础(配置,建库,提交,推送 GitHub) SVN ? Git ? 目前市面上主流的版本控制系统就是 SVN 和 Git . 两者的区别简单通俗地说就是,版本数据是否有在本地. 如果觉得不够简单通俗,直接上图: 这是 SVN ,显然是一种集中式的版本控制系统,主要的版本数据全部保存在服务器. 本地用户只有自己以前同步过的版本,如果不联网,用户是看不到未同步过的历史版本的. 提交需要连接服务器(非本地版本库),也需要写权限. 管理员灵活可以掌控开发人员的读.写.修改目录等权限. 提交…