User Tools

Site Tools


git-related

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
git-related [2021/09/22 00:49] – [如何取消merge的状态] morgan0329git-related [2021/09/22 00:51] (current) morgan0329
Line 1: Line 1:
 +<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>

Except where otherwise noted, content on this wiki is licensed under the following license: 沪ICP备12046235号-2
Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki