Table of Contents
<markdown>
远端某分支强制回滚到某个版本
先把这个远端分支比如:staging 用git clone到本地
然后本地上用toiseturse git的git log功能查看log,然后在某一次提交上点击 reset to this。能让你本地直接回滚到这个版本上
接着 git push -f强制把本地推上去 就行了
F.Y.I. https://blog.csdn.net/yxlshk/article/details/79944535
如何取消merge的状态
git merge –abort
远程已删除分支,本地仍显示远程分支存在
如何解决这个问题,让本地看到的信息和远程的一致
git remote show origin (查看一下) git remote prune origin (真正同步信息的命令)
分支各种操作
git branch //查看本地所有分支 git branch -r //查看远程所有分支 git branch -a //查看本地和远程的所有分支 git branch <branchname> //新建分支 git branch -d <branchname> //删除本地分支 git branch -D <branchname> //强制删除本地分支 git branch -d <branchname1> <branchname2> <branchname3> //批量删除本地分支 git branch -d -r <branchname> //删除远程分支,删除后还需推送到服务器 git push origin:<branchname> //删除后推送至服务器 git branch -m <oldbranch> <newbranch> //重命名本地分支
一些简单命令
将远程主机的所有最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。 git fetch --all git pull 则是将远程主机的最新内容拉下来后直接合并, 即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。
还原本地代码
1 未使用 git add 缓存代码时
还原本地所有修改: git checkout . (如果直接用tortoise git还原起来速度极其慢)
还原某一个文件: git checkout – filepathname (比如: git checkout – readme.md ,不要忘记中间的 “–” ,不写就成了检出分支了!!)。
还原所有java文件: git checkout – *.java
此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。但是此命令不会删除掉刚新建的文件。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。自己手动删除就好了。
2 已经使用 git add 缓存代码时
可以使用 git reset HEAD filepathname (比如: git reset HEAD readme.md)来放弃指定文件的缓存,放弃所以的缓存可以使用 git reset HEAD . 命令。
此命令用来清除 git 对于文件修改的缓存。相当于撤销 git add 命令所在的工作。在使用本命令后,本地的修改并不会消失,而是回到了如(一)所示的状态。继续用(一)中的操作,就可以放弃本地的修改。
3 已经用 git commit 提交了代码。
可以使用 git reset –hard HEAD^ 来回退到上一次commit的状态。
此命令可以用来回退到任意版本:git reset –hard commitid
你可以使用 git log 命令来查看git的提交历史。git log 的输出如下,之一这里可以看到第一行就是 commitid:
关于如何还原最近的一次提交(包括提交记录都删除掉) git reset –hard HEAD~1 这一步,将让本地回到上一次的提交commit, 也就是说会在本地代码中删除最近一次的提交 git push –force 把本地的这个改变强制push到远程的repository中
合并两个分支
比如要把:A分支合并到B分支。1 把A分支更新为最新,2 把B分支更新为最新 3 合并A分支到B分支, 4 提交B分支
git checkout A git pull origin A git checkout B git pull origin B git merget --no-ff A git push origin B
删除.pack中的大文件
查看排名前3大的文件的索引:
git verify-pack -v .git/objects/pack/pack-89500278de7262e638bcad7ce60148665f8813b7.idx | sort -k 3 -n | tail -3 返回: a9288323c7020236cd8dae86e08782f38d5b51b0 blob 212226328 55420419 792540169 8a57c992490359173dfa2e20633e8a54ff2c4112 blob 323558902 106731792 536930736 4b850677d8141f1b13b3f51bb62977ade7f3f893 blob 368314496 53374165 850810304
查这个索引对应的文件名:
git rev-list --objects --all | grep a9288323c7020236cd8dae86e08782f38d5b51b0 返回: a9288323c7020236cd8dae86e08782f38d5b51b0 Database/data.sql
在本地所有提交记录中删除这个文件: git filter-branch –index-filter 'git rm –cached –ignore-unmatch Database/data.sql' 这一步要执行很久
然后重置,最后提交上去:
rm -rf .git/refs/original/ git reflog expire --expire=now --all git fsck --full --unreachable git repack -A -d git gc --aggressive --prune=now git push --force
</markdown>