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?
目录
相关文章
|
1月前
|
开发工具 git
记IDEA Git版本回退并push到远程操作
记IDEA Git版本回退并push到远程操作
56 1
记IDEA Git版本回退并push到远程操作
|
1月前
|
开发工具 git 开发者
|
1月前
|
开发工具 git
web后端-IDEA的Git操作
web后端-IDEA的Git操作
|
1月前
|
Linux 网络安全 开发工具
Git拉取代码的完整示例操作
Git拉取代码的完整示例操作
127 0
|
1月前
|
Shell 开发工具 git
git相关操作
git相关操作
|
1月前
|
开发工具 git
Git操作远程仓库及解决合并冲突
Git操作远程仓库及解决合并冲突
123 0
|
21天前
|
开发工具 git
idea的git reset current branch to here操作详解
idea的git reset current branch to here操作详解
21 1
|
1月前
|
开发工具 git 开发者
【专栏】探讨了 Git 中的 `git rebase` 操作,它用于重新应用提交到另一分支,改变历史顺序
【4月更文挑战第29天】本文探讨了 Git 中的 `git rebase` 操作,它用于重新应用提交到另一分支,改变历史顺序。与 `git merge` 不同,rebase 重写提交历史,提供简洁线性的历史记录。文章介绍了 rebase 的基本操作、应用场景,如整理提交历史、解决冲突和整合分支,并强调了使用注意事项,如避免在公共分支上操作。尽管 rebase 可以带来整洁的历史和冲突解决便利,但其潜在的风险和可能导致的历史混乱需谨慎对待。理解并恰当使用 `git rebase` 可以提升开发效率和代码质量。
|
1月前
|
开发工具 git 开发者
掌握常见Git操作:技巧与实践
掌握常见Git操作:技巧与实践