开发者社区> zeusro> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

git的神操作

简介: 原文:https://www.zeusro.tech/2016/02/21/git/
+关注继续查看

设置git

git config --global user.name "Rose" 
git config --global user.email 

增加远程origin

git remote add  origin <>

第一次提交

cd <project>
git remote add origin “”
git add .
git commit -am  "处女提交"
git push -u origin  master

日常的提交

git add .
d:
cd <project>
git commit -am "test"
git push 

分支管理

  1. 推送特定分支

    git push origin  NewUI
  2. 查看当前分支

    git branch
  3. 列出远程分支

    git branch -r
  4. 列出所有分支

    git branch -a
  5. 创建分支

    git branch branchName
  6. 切换分支

    git checkout  AndroidStudio
    git checkout  master
  7. 创建并切换到分支

    git checkout -b branchName

灾难处理

修复未提交文件中的错误(重置)

如果你现在的工作目录(work tree)里搞的一团乱麻, 但是你现在还没有把它们提交; 你可以通过下面的命令, 让工作目录回到上次提交时的状态(last committed state):

git reset --hard HEAD

回退所有内容到上一个版本

git reset HEAD^ 

回溯到特定的commitid

在.git/logs/head 里面找到我那个提交了用
git reset  <commit id> --hard

紧急热修复

思路是找到上次的稳定版本,修改后推送到目标分支.这种修复方式是最快的

# git checkout HEAD^1
回滚到上一次release的commitID
git checkout <commit ID>
git commit -am "fix"
git push origin HEAD:master

撤销上一次提交

(该操作非常凶险,所有这次提交的内容都会不见)
git revert HEAD

git log

git log --stat -n 5 // 简单的列出了修改过的文件
git log -p -n 5 // 详细的列出修改过的文件,及提交文件的对比
git log --graph // ASCII 字符串表示的简单图形,形象地展示了每个提交所在的分支及其分化衍合情况
git log --all --decorate --graph
git log --pretty=oneline
// 只显示哈希值和提交说明
git log --pretty=oneline/short/full/fuller/format:""(格式等)
git log --name-only // 仅在提交信息后显示已修改的文件清单
git log --no-merges // 不显示merge的log
:格式化日志
git log  --pretty=format:" %cd %h - %s" --since=3.days

参考链接:
Git 基础 - 查看提交历史

其他命令

git checkout //后面不跟任何参数,则就是对工作区进行检查
git checkout --filename //从暂存区中恢复文件(确保filename与branch名称不同)

VS插件异常处理

  1. 无法将分支 master 发布到远程 origin,因为远程存储库中已存在具有同一名称的分支。发布此分支将导致远程存储库中的分支发生非快进更新。

    git push --set-upstream origin master
  2. 无法将本地分支master发布到远程存储库origin

    git config branch.master.remote origin
    git config branch.master.merge refs/heads/master

git的错误处理

2边的文件都有修改

You have unmerged paths.
(fix conflicts and run "git commit")
Move/rename/delete/copy/edit/whatever those files to get your code to the desired state, then git add the changes and git commit the conflict resolution.

git reset 9b25cd5635b4986aa1f1d614381226f79d123f87  --hard

中途初始化git项目之后从远程仓库中拉取发生错误 The following untracked working tree files would be overwritten by merge


git fetch origin
git reset --hard origin/master

git pull需要密码

把C:\Users\<用户>\.ssh里的id_rsa和id_rsa.pub文件复制到git安装目录下的.ssh目录里面即可

fatal: The current branch master has no upstream branch


[branch "master"]
remote = origin
merge = refs/heads/master

mac ssh 出现 permission deny 的解决方案

chmod 600 ~/.ssh/id_rsa
ssh-add  ~/.ssh/id_rsa

Your branch and 'origin/master' have diverged

注意,此操作会废了本地的提交

git fetch origin
git reset --hard origin/master

特别的技巧

修改.gitignore文件后,清理项目文件夹


git rm -r --cached .
git add .
git commit -am "clean"
git push

清除垃圾前提示


git clean -i -d

强制清除垃圾


git clean -f  -d

多个pushurl,一个pull地址


git remote set-url --push --add origin <url>
git remote set-url --push --add origin <url>

效果如下:

[remote "origin"]
url = <url1>
pushurl = <url2>
pushurl = <url1>
fetch = +refs/heads/*:refs/remotes/origin/*

修改远程url


git remote set-url  origin <URL>

从历史中永远删除某个文件

https://rtyley.github.io/bfg-repo-cleaner/ 中下载 bfg-1.13.0.jar

java -jar bfg.jar --strip-blobs-bigger-than 100M <git项目完整路径>
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push

push所有本地的分支到远程仓库中对应匹配的分支。


git config --global push.default matching

只有当前分支会被push到你使用git pull获取的代码。

git config --global push.default simple

更改origin url

git remote  set-url origin <URL>

为git设置代理和取消代理


git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'

git config --local http.proxy 'http://127.0.0.1:1080'
git config --local https.proxy 'http://127.0.0.1:1080'
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy

抹除所有提交历史,重新提交


git checkout --orphan latest_branch
git add -A
git commit -am "重新提交"
git branch -D master
git branch -m master
git push -f origin master


**gitlab的注意事项**
  1. gitlab的话,要先取消protected_branches中 master 的保护,然后再将本地的这个 master 提交到另外一个远程分支

    git push origin master:temp;

  2. 然后设置这个temp 分支为默认分支,然后再提交到master远程分支

    git push origin master:master;

  3. 删除 temp 远程分支,设置 master 为默认分支

    : 删除远程master分支
    git push origin :temp

设置发布用公钥

把本地用户的 ~/.ssh/id_rsa.pub 的内容追加到 Git 服务器仓库所属用户的 ~/.ssh/authorized_keys 文件的末尾即可。文件不存在的话用`ssh-keygen`生成

管理大文件

Git Large File Storage,原理是历史里面存放文件的指针,文件放在远程仓库,提高整个拉取,推送效率。

git lfs install
brew install git-lfs
git lfs track "*.psd"
git add .gitattributes

如果大文件以及存在于历史中,则需要输入另外的命令

git lfs migrate import --include="*.psd"

从别的地方重新拉取仓库之后,被track的文件已指针的形式存在,如果需要还原文件,得输入2个命令

git lfs install
git lfs pull

获得命令帮助

git lfs help

参考链接:

  1. ssh 连接提示 Permission denied (publickey) 怎么破
  2. Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)
  3. SSH Permission denied (publickey)解决办法
  4. 关于Gitlab若干权限问题
  5. git删除master分支后重建
  6. git: Your branch and 'origin/master' have diverged - how to throw away local commits?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Git 系列教程(7)- 撤销操作
Git 系列教程(7)- 撤销操作
43 0
Git常用命令及方法大全(2)
Git常用命令及方法大全(2)
116 0
Git命令使用总结
1.在GitHub上创建了一个新项目,如何将本地的一个工程上传上去 1) copy github项目地址 2) 在android studio中打开terminal命令行,执行命令将本项目所有代码添加 git add * 3)执行命令提交 git co...
1141 0
我 Git 命令列表 (2)【转】
转自:http://www.microsofttranslator.com/bv.aspx?from=en&to=zh-CHS&a=http%3A%2F%2Fvincenttam.github.io%2Fblog%2F2014%2F06%2F17%2Fmy-git-command-list-2%2F 因为我试图导入我旧的 WordPress 帖子到此博客不影响source分支,我创建了一个新的分支,称为wpcom-importer分支,对rake deploy成功的运行。
1003 0
+关注
zeusro
嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤
20
文章
20
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载