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>