Git常用操作与错误处理

260 阅读4分钟

生成公钥

ssh-keygen -t rsa -C "youremail@example.com"

配置用户名

全局配置

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

局部配置

git config user.name "Your Name"
git config user.email "email@example.com"

查看提交记录

git log 命令显示从最近到最远的提交日志, 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 --pretty=oneline 参数:

git log --pretty=oneline

Git时光机

回退到某一个提交版本

版本号没必要写全,前几位就可以了,Git会自动去找。

当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

// 例如
git reset --hard e655927bcfaf5c71e850abdacca1f8565fef666e(提交版本号)

// 可以这么写
git reset --hard e6559

回退版本后返回未来

1、查看所有提交记录

git reflog

// 输出
d1d1d7e HEAD@{3}: commit: fix some bug
bea1f89 HEAD@{4}: commit: 删除无用文件,增加登录失败错误提示
a908d39 HEAD@{5}: commit: fix some bug

2、执行返回命令

git reset --hard d1d1d7e(版本号)

比本地和上一次提交的差别

git diff HEAD -- readme.txt(文件名)

丢弃工作区修改

git chcekout -- file(文件名)

丢弃添加到暂存区的内容(即运行过git add后)

1、git reset HEAD <file>(文件名)

分支管理

新建并切换分支

我们注意到切换分支使用git checkout <branch>,而前面讲过的撤销修改则是git checkout -- <file>,同一个命令,有两种作用,确实有点令人迷惑。

实际上,切换分支这个动作,用switch更科学。因此,最新版本的Git提供了新的git switch命令来切换分支:

git switch -c dev

直接切换到已有的分支

git switch master

合并分支

git merge <name>

删除分支

git branch -d <name>

推送本地分支到远程

git push origin <分支名>:<分支名>

分支重命名

// 对当前本地分支重命名

git branch -m <new_name>

// 对任意本地分支重命名

git branch -m <old_name> <new_name>

// 对于已经推送到远端仓库的分支,可以执行如下 快捷命令 进行重命名,命令逻辑等同于:先删除远端分支,再推送本地分支至远端仓库。

git push origin :<old_name> <new_name>

新建标签

// 创建标签 默认标签是打在最新提交的commit上的

git tag v1.0

// 对指定的历史版本打标签

1、查看历史提交

git log --pretty=oneline --abbrev-commit

// 输出
12a631b (HEAD -> master, tag: v1.0, origin/master) merged bug fix 101
4c805e2 fix bug 101
e1e9c68 merge with no-ff
f52c633 add merge
cf810e4 conflict fixed
5dc6824 & simple
14096d0 AND simple
b17d20e branch test
d46f35e remove test.txt
b84166e add test.txt
519219b git tracks changes
e43a48b understand how stage works
1094adb append GPL
e475afc add distributed
eaadf4e wrote a readme file

2、给指定提交打标签

git tag v0.9 f52c633

// 查看标签

git tag

// 删除标签

git tag -d v0.1

// 推送标签到远程

git push origin <tagName>

// 一次性推送全部尚未推送到远程的本地标签

git push origin --tags

// 删除远程标签

1、先删除本地标签
git tag -d <tagName>

2、删除远程
git push origin :refs/tags/<tagName>

从远程仓库克隆

// 克隆远程仓库

git clone <仓库地址>

// 克隆远程仓库的指定分支

git clone -b <仓库地址>

Git修改远程仓库地址

  • 通过命令行关联远程仓库地址
git remote set-url origin <仓库地址>
  • 通过命令行修改远程地址
git remote set-url origin <仓库地址>
  • 先删除原有仓库地址,然后添加新地址
git remote rm origin

git remote add origin <仓库地址>
  • 修改配置文件
> cd json/.git
> vim config

[core]
  repositoryformatversion = 0
  filemode = true
  logallrefupdates = true
  precomposeunicode = true

[remote "origin"]
  # 修改成新的仓库地址
  url = <仓库地址>
  fetch = +refs/heads/*:refs/remotes/origin/*

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

Git set-url报错 fatal: No such remote 'origin'

set-url命令是用来修改远程仓库的地址的,如果在运行这个命令的时候,还没有配置远程仓库地址,就会报错:

fatal: No such remote 'origin'

解决办法很简单,先增加一个远程仓库地址就行了

git remote add origin "xxx.git"

Git 同步远程仓库报错

fatal: refusing to merge unrelated histories解决

这个错误的原因是两个分支是两个不同的版本,具有不同的提交历史。

// 可以允许不相关历史提,强制合并
git pull origin master --allow-unrelated-histories