git-related
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
git-related [2021/09/22 00:50] – morgan0329 | git-related [2021/09/22 00:51] (current) – morgan0329 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | < | ||
+ | ## 远端某分支强制回滚到某个版本 | ||
+ | 先把这个远端分支比如:staging 用git clone到本地 | ||
+ | 然后本地上用toiseturse git的git log功能查看log,然后在某一次提交上点击 reset to this。能让你本地直接回滚到这个版本上 | ||
+ | |||
+ | 接着 git push -f强制把本地推上去 就行了 | ||
+ | |||
+ | F.Y.I. | ||
+ | |||
+ | ## 如何取消merge的状态 | ||
+ | git merge --abort | ||
+ | |||
+ | ## 远程已删除分支,本地仍显示远程分支存在 | ||
+ | 如何解决这个问题,让本地看到的信息和远程的一致 | ||
+ | |||
+ | ``` | ||
+ | git remote show origin | ||
+ | |||
+ | git remote prune origin | ||
+ | ``` | ||
+ | |||
+ | |||
+ | ## 分支各种操作 | ||
+ | ``` | ||
+ | git branch | ||
+ | git branch -r // | ||
+ | git branch -a // | ||
+ | |||
+ | git branch < | ||
+ | git branch -d < | ||
+ | git branch -D < | ||
+ | git branch -d < | ||
+ | git branch -d -r < | ||
+ | git push origin:< | ||
+ | |||
+ | git branch -m < | ||
+ | ``` | ||
+ | |||
+ | ## 一些简单命令 | ||
+ | ``` | ||
+ | 将远程主机的所有最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。 | ||
+ | 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 | ||
+ | |||
+ | 你可以使用 git log 命令来查看git的提交历史。git log 的输出如下, | ||
+ | |||
+ | |||
+ | 关于如何还原最近的一次提交(包括提交记录都删除掉) | ||
+ | git reset --hard HEAD~1 | ||
+ | git push --force | ||
+ | |||
+ | |||
+ | ## 合并两个分支 | ||
+ | |||
+ | 比如要把: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/ | ||
+ | 返回: | ||
+ | a9288323c7020236cd8dae86e08782f38d5b51b0 blob | ||
+ | 8a57c992490359173dfa2e20633e8a54ff2c4112 blob | ||
+ | 4b850677d8141f1b13b3f51bb62977ade7f3f893 blob | ||
+ | ``` | ||
+ | |||
+ | 查这个索引对应的文件名: | ||
+ | ``` | ||
+ | git rev-list --objects --all | grep a9288323c7020236cd8dae86e08782f38d5b51b0 | ||
+ | 返回: | ||
+ | a9288323c7020236cd8dae86e08782f38d5b51b0 Database/ | ||
+ | ``` | ||
+ | |||
+ | 在本地所有提交记录中删除这个文件: | ||
+ | git filter-branch --index-filter 'git rm --cached --ignore-unmatch | ||
+ | 这一步要执行很久 | ||
+ | |||
+ | 然后重置,最后提交上去: | ||
+ | ``` | ||
+ | rm -rf .git/ | ||
+ | git reflog expire --expire=now --all | ||
+ | git fsck --full --unreachable | ||
+ | git repack -A -d | ||
+ | git gc --aggressive --prune=now | ||
+ | git push --force | ||
+ | ``` | ||
+ | </ |