单机上使用git
安装:
yum install -y git
创建一个空目录,以这个空目录为当前目录
mkdir /data/gitroot
cd /data/gitroot
[root@jinkai01 ~]# mkdir /data/gitroot
[root@jinkai01 ~]# cd /data/gitroot
初始化仓库
git init
[root@jinkai01 gitroot]# git init
初始化空的 Git 版本库于 /data/gitroot/.git/
创建新文件并编辑内容
echo -e "aaa\nbbb\nccc" > a.txt
把a.txt加到仓库
git add a.txt
add完了必须要commit才算真正把文件提交到git仓库里,-m后面输入的是本次提交的说明,可以输入任意内容。
[root@jinkai gitroot]# git commit -m "new file a.txt"
[master(根提交) cbaba01] new file a.txt
Committer: root <[email protected]>
您的姓名和邮件地址基于登录名和主机名进行了自动设置。请检查它们正确
与否。您可以通过下面的命令对其进行明确地设置以免再出现本提示信息:
git config --global user.name "Your Name"
git config --global user.email [email protected]
设置完毕后,您可以用下面的命令来修正本次提交所使用的用户身份:
git commit --amend --reset-author
1 file changed, 4 insertions(+)
create mode 100644 a.txt
再次更改a.txt
查看当前仓库中的状态,比如是否有改动的文件
git status
[root@jinkai gitroot]# vim a.txt
[root@jinkai gitroot]# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 修改: a.txt
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
可以对比a.txt本次修改了什么内容,相比较仓库里面的版本
git diff a.txt
[root@jinkai gitroot]# git diff a.txt
diff --git a/a.txt b/a.txt
index 35fbd83..cc59506 100644
--- a/a.txt
+++ b/a.txt
@@ -1,4 +1,6 @@
aaa
bbb
ccc
-ddd //-号就是删除的
+ //+号就是新添加的
+eee
+fff
版本回退
多更改几次a.txt,然后add,commit
[root@jinkai gitroot]# git add a.txt
[root@jinkai gitroot]# git commit -m "old file a.txt"
查看所有提交记录
git log
[root@jinkai gitroot]# git log
commit 1f120c286d46bb62013cfd6579dccf1856cf6c49
Author: root <[email protected]>
Date: Thu Dec 10 22:43:56 2020 +0800
old file a.txt
commit cbaba019f9ddfa540a96d46835ab25e91b988b00
Author: root <[email protected]>
Date: Thu Dec 10 22:42:10 2020 +0800
new file a.txt
简洁一行显示
git log --pretty=oneline
[root@jinkai gitroot]# git log --pretty=oneline
1f120c286d46bb62013cfd6579dccf1856cf6c49 old file a.txt
cbaba019f9ddfa540a96d46835ab25e91b988b00 new file a.txt
回退版本,其中后面跟的字符串是简写
git reset --hard ****
[root@jinkai gitroot]# git reset --hard 1f120c2
HEAD 现在位于 1f120c2 old file a.txt
[root@jinkai gitroot]# git log --pretty=oneline
1f120c286d46bb62013cfd6579dccf1856cf6c49 old file a.txt
cbaba019f9ddfa540a96d46835ab25e91b988b00 new file a.txt
如果想再次退回,但是忘记了前面的编码,可以使用下面的命令查找
git reflog查看所有历史版本
[root@jinkai gitroot]# git reflog
1f120c2 HEAD@{0}: reset: moving to 1f120c286d46bb62013cfd6579dccf1856cf6c49
5badc97 HEAD@{1}: commit: hahahah
1f120c2 HEAD@{2}: commit: old file a.txt
cbaba01 HEAD@{3}: commit (initial): new file a.txt
[root@jinkai gitroot]# git reset --hard 5badc97
HEAD 现在位于 5badc97 hahahah
[root@jinkai gitroot]# git log --pretty=oneline
5badc97b5be29236b4db7cf2302474ae439bb0d1 hahahah
1f120c286d46bb62013cfd6579dccf1856cf6c49 old file a.txt
cbaba019f9ddfa540a96d46835ab25e91b988b00 new file a.txt
撤销修改
不小心删除了a.txt
rm -f a.txt
恢复a.txt
git checkout -- a.txt
[root@jinkai gitroot]# rm -rf a.txt
[root@jinkai gitroot]# git checkout
D a.txt
[root@jinkai gitroot]# git checkout -- a.txt
[root@jinkai gitroot]# ls
a.txt
如果a.txt文件修改,add后但没有commit,再想回退到上一次提交的状态,可以使用git reset HEAD a.txt,再执行git checkout -- a.txt
[root@jinkai gitroot]# vim a.txt
[root@jinkai gitroot]# cat a.txt
aaa
bbb
ccc
[root@jinkai gitroot]# echo ddd >> a.txt
[root@jinkai gitroot]# cat a.txt
aaa
bbb
ccc
ddd
[root@jinkai gitroot]# git add a.txt
[root@jinkai gitroot]# git reset HEAD a.txt
重置后撤出暂存区的变更:
M a.txt
[root@jinkai gitroot]# git checkout -- a.txt
[root@jinkai gitroot]# cat a.txt
aaa
bbb
ccc
删除文件
git rm 2.txt
文件已删除,但是还未在库里面删除,用下面的命令从库里面删除文件
git commit -m "rm 2.txt"
[root@jinkai gitroot]# git rm a.txt
rm 'a.txt'
[root@jinkai gitroot]# ls
[root@jinkai gitroot]# git commit -m "delete a.txt"
[master 6027f5c] delete a.txt
1 file changed, 4 deletions(-)
delete mode 100644 a.txt
[root@jinkai gitroot]# git checkout -- a.txt
error: pathspec 'a.txt' did not match any file(s) known to git.
建立远程仓库
首先到 https://github.com 注册一个账号
新建仓库
右上角有一个加号new repository
名字自定义,比如叫jinkai-linux 选择public 点 create repository
添加key:右上角点自己头像,选择settings,左侧选择SSH and GPG keys
左侧点New SSH key,把linux机器上的~/.ssh/id_rsa.pub内容粘贴到这里
[root@jinkai gitroot]# ssh-keygen
[root@jinkai gitroot]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMiw64fA0/5yaTC25IjgM2MzNZhAxtdWJhujGgAoZLcIsbfYKBlVKzURj9KURhrZQlprbX4LgfyfAuZnIXYQxIQWoWufc6P+cbLJjydR36ROPmHx9BYN7Jf405LVf06S/1W9dirpJd3HxYTh3cxxQXKrw0/sJgfeBGQh4D/Y+zCSlNfuAsV5D+VwjVciCrv27TVL7tNaYCBv4v+MYUOjvm/jtBHBWwTmhRhV2tGVdKAP0TkuK7mM19UapsV/1LW9fwDptgyedf236fAaf5EM5cXpqXHR5p1+hueLP8Ya4rOsarmSISFVwQyl1kCSnj7b/TI8QYF2vf0RBbn82wHJ+X [email protected]
把本地仓库推送到远程仓库
先本地建立一个仓库
[root@jinkai gitroot]# mkdir /tmp/jinkai-linux
[root@jinkai gitroot]# cd !$
cd /tmp/jinkai-linux
[root@jinkai jinkai-linux]# echo "# jinkai-linux" >> README.md
[root@jinkai jinkai-linux]# git init
初始化空的 Git 版本库于 /tmp/jinkai-linux/.git/
[root@jinkai jinkai-linux]# git add READE.md
fatal: 路径 'READE.md' 未匹配任何文件
[root@jinkai jinkai-linux]# git commit -m "first commit"
[master(根提交) d0000e6] first commit
1 file changed, 1 insertion(+)
create mode 100644 README.md
[root@jinkai newfile]# git branch -M main
这一步是在远程创建一个新的仓库jinkai-linux
git remote add origin https://github.com/jinkai-linux/jinkai-linux.git
然后把本地的仓库推送到远程的
git push -u origin main
[root@jinkai jinkai-linux]# git remote add origin https://github.com/jinkai-linux/jinkai-linux.git
[root@jinkai jinkai-linux]# git push -u origin main
Username for 'https://github.com': jinkai-linux
Password for 'https://[email protected]':
Counting objects: 3, done.
Writing objects: 100% (3/3), 215 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/jinkai-linux/jinkai-linux.git
* [new branch] main -> main
分支 main 设置为跟踪来自 origin 的远程分支 main。
下一次本地仓库更改后再推送,就可以直接 git push
[root@jinkai jinkai-linux]# vim a.txt
[root@jinkai jinkai-linux]# git add a.txt
[root@jinkai jinkai-linux]# git commit -m "hahaha"
[main 866e75f] hahaha
1 file changed, 3 insertions(+)
create mode 100644 a.txt
[root@jinkai jinkai-linux]# git push
克隆远程仓库
[root@jinkai tmp]# cd /home/
[root@jinkai home]# git clone https://github.com/jinkai-linux/jinkai-linux.git
正克隆到 'jinkai-linux'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), done.
在本地修改仓库内容:
[root@jinkai jinkai-linux]# vim README.md
[root@jinkai jinkai-linux]# cat README.md
# jinkai-linux
abcdefghijk
[root@jinkai jinkai-linux]# git add README.md
[root@jinkai jinkai-linux]# git commit -m "hhhhh"
[main 4da96e2] hhhhh
1 file changed, 1 insertion(+)
然后再推送到远程服务端:git push
[root@jinkai jinkai-linux]# git push
远程端刷新查看多了添加的内容
远程服务端修改内容,然后下拉到自己的客户端:git pull
[root@jinkai jinkai-linux]# git pull
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
来自 https://github.com/jinkai-linux/jinkai-linux
4da96e2..6106cd6 main -> origin/main
更新 4da96e2..6106cd6
Fast-forward
README.md | 2 ++
1 file changed, 2 insertions(+)
[root@jinkai jinkai-linux]# cat README.md
# jinkai-linux
abcdefghijk
111111
2222222
下拉到本地的内容已更新
知识扩展:
Github添加了SSH公钥,git push还是需要输入密码,解决方法如下:
[root@jinkai newfile]# cat /root/.netrc
machine github.com
login github-name(github用户名)
password password(登录密码)