咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

一、初始化仓库和第一次提交

Git 全局用户设置

设置“全局用户”作为默认的提交者,优先级低。

1
2
3
git config --global user.name "kevinvane"
git config --global user.email "kevinvane@github.com"
git config --global --list
Git 项目用户设置

在项目根目录下设置“项目用户”,优先级高于“全局用户设置”

1
2
3
git config user.name "kevinvane"
git config user.email "kevinvane@github.com"
git config --local --list

命令会在 .git/config 文件写入信息

1
2
3
[user]
name = kevinvane
email = kevinvane@github.com
创建SSH密钥
1
2
3
4
5
6
7
8
# rsa秘钥,ssh-ras算法已被弃用
ssh-keygen -t rsa -C "useremail@mail.com"
cd ~/.ssh
cat id_rsa.pub
# id_rsa.pub 是公钥信息,贴在Github上,就能push代码了。

# 推荐使用安全的ed25519加密算法
ssh-keygen -t ed25519 -C "useremail@mail.com"
指定生成的密钥文件名

假设在不覆盖已有 id_rsa的情况下创建了一个新密钥 id_rsa_v2,修改配置文件指定使用v2密钥。

1
2
3
4
5
# -f 指定保存文件的路径和文件名称( -f 可以忽略)
ssh-keygen -t rsa -C "usere2mail@mail.com" -f ~/.ssh/id_rsa_v2
vim ~/.ssh/config
# 配置文件内新增一行,指定使用的私钥文件
IdentityFile ~/.ssh/id_rsa_v2
多个私钥共存并且同时生效
1
2
3
4
5
# ubuntu
ssh-keygen -t rsa -C "usere1mail@privat.com" ~/.ssh/id_rsa_privat
ssh-keygen -t rsa -C "usere2mail@github.com" ~/.ssh/id_rsa_github
ssh-keygen -t rsa -C "usere3mail@gitlab.com" ~/.ssh/id_rsa_gitlab
vim ~/.ssh/config

config 文件分别为三个Host匹配不同的私钥。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Host 192.168.0.66
HostName 192.168.0.66
IdentityFile ~/.ssh/id_rsa_privat
PreferredAuthentications publickey
User encod
IdentitiesOnly yes
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_rsa_github
PreferredAuthentications publickey
User encod
IdentitiesOnly yes
Host gitlab.com
HostName gitlab.com
IdentityFile ~/.ssh/id_rsa_gitlab
PreferredAuthentications publickey
User encod
IdentitiesOnly yes

用ssh命令重新连接服务器,此时它会使用新的私钥:

  • 192.168.0.66 会使用 id_rsa_privat
  • github.com 会使用 id_rsa_github
  • gitlab.com 会使用 id_rsa_gitlab
创建一个新仓库
1
2
3
4
5
6
git clone git@github.com:kevinvane/hello.git
cd hello
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
推送现有文件夹
1
2
3
4
5
6
cd existing_folder
git init
git remote add origin git@github.com:kevinvane/hello.git
git add .
git commit -m "Initial commit"
git push -u origin master
推送现有的 Git 仓库
1
2
3
4
5
cd existing_repo
git remote rename origin old-origin
git remote add origin git@github.com:kevinvane/hello.git
git push -u origin --all
git push -u origin --tags

二、常用命令

1、暂存

会有这么一个场景,现在你正在用你的 feature 分支上开发新功能。这时,生产环境上出现了一个 bug 需要紧急修复,但是你这部分代码还没开发完,不想提交,怎么办?
这个时候可以用 git stash命令先把工作区已经修改的文件暂存起来,然后切换到 hotfix 分支上进行 bug 的修复,修复完成后,切换回 feature 分支,从堆栈中恢复刚刚保存的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 把本地的改动暂存起来
git stash
# 执行存储时,添加备注,方便查找。
git stash save "message"

# 应用最近一次暂存的修改,并删除暂存的记录
git stash pop

# 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},
# 如果要使用其他个,git stash apply stash@{$num} 。
git stash apply

# 查看stash有哪些存储
git stash list
# 删除所有缓存的stash
git stash clear
2、快速提交
1
2
# 【git add . && git commit -m】两条指令合并为一条
git commit -am
3、修改最后一次提交message

有些时候不小心在commit中写错了了信息,可以执行命令修改:

1
$ git commit --amend -m "新的修改提交信息"

注意:只能修改最后一次commit 。

4、取消跟踪文件

比如,创建仓库的时候 .gitignore 没写好,把 .idea/ 的文件也加到仓库中,现在不想继续跟踪 .idea/ 里面的文件,那么,执行以下命令,删除跟踪文件,保留本地的文件。

1
$ git rm -r --cached .idea/
5、拉取远程分支

clone 命令默认是克隆master分支,那么要拉取其他分支,用以下方法

1
2
3
git clone git@github.com:gege/demo.git
git fetch origin dev
git checkout dev
6、合并
1
$ git merge develop --no-ff -m 'merge develop into master'

–no-ff 可以保存分支历史,能够更好的查看 merge 历史,以及 branch 状态。

7、撤销修改

假如我修改了文件 readme.txt,并没有add 和 commit ,但是对这次的修改搞到不满意,想还原到修改之前的状态(将文件在工作区的修改全部撤销)。

1
$ git checkout -- readme.txt

注意:如果已经add,并且再次做了修改,那么上面的命令可以恢复到add时的状态

8、撤销commit

假如提交了一次commit,马上就发现有问题,或者我想重新commit一次,修改 -m 'xx' 的内容,可以恢复到执行commit之前的状态。

查询提交历史

1
2
3
4
5
6
7
8
9
10
11
$ git log
commit 9ff40a7f902eeb7dd75a277246f3cd2c5b73e8de (HEAD -> reload)
Date: Sat Jul 20 12:01:53 2019 +0800

这是一次错误的提交

commit af57771d43deb47aff5d0dd16337b77634200072 (origin/reload)
Date: Fri Jul 19 22:46:30 2019 +0800

Fix BUG

  • 9ff40a7f902eeb7dd75a277246f3cd2c5b73e8de 是最新的一次提交,也就是错误commit。
  • af57771d43deb47aff5d0dd16337b77634200072 是上次的commit

我们就恢复到上次的commit,加上 --mixed 参数可以撤销修改。

1
$ git reset af57771d43deb47aff5d0dd16337b77634200072 --mixed

执行完之后,文件内容都没变,只是状态改变了(Untracked)。

1
2
git add 
git commit -a

重新提交即可。