一、初始化仓库和第一次提交
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
| ssh-keygen -t rsa -C "useremail@mail.com" cd ~/.ssh cat id_rsa.pub
ssh-keygen -t ed25519 -C "useremail@mail.com"
|
指定生成的密钥文件名
假设在不覆盖已有 id_rsa
的情况下创建了一个新密钥 id_rsa_v2
,修改配置文件指定使用v2密钥。
1 2 3 4 5
| 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
| 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
git stash apply
git stash list
git stash clear
|
2、快速提交
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
)。
重新提交即可。