设置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
分支管理
-
推送特定分支
git push origin NewUI
-
查看当前分支
git branch
-
列出远程分支
git branch -r
-
列出所有分支
git branch -a
-
创建分支
git branch branchName
-
切换分支
git checkout AndroidStudio git checkout master
-
创建并切换到分支
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插件异常处理
-
无法将分支 master 发布到远程 origin,因为远程存储库中已存在具有同一名称的分支。发布此分支将导致远程存储库中的分支发生非快进更新。
git push --set-upstream origin master
-
无法将本地分支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的注意事项**
- gitlab的话,要先取消protected_branches中 master 的保护,然后再将本地的这个 master 提交到另外一个远程分支
git push origin master:temp;
- 然后设置这个temp 分支为默认分支,然后再提交到master远程分支
git push origin master:master;
-
删除 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
参考链接: