初始化操作
gerry@gerry-H81M-DS2:/temp/files$ git init
初始化空的 Git 仓库于 /temp/files/.git/
gerry@gerry-H81M-DS2:/temp/files$ ls -al
总用量 12
drwxrwxr-x 3 gerry gerry 4096 9月 19 11:30 .
drwxrwxrwx 17 root root 4096 9月 19 11:28 ..
drwxrwxr-x 7 gerry gerry 4096 9月 19 11:30 .git
新增提交操作
gerry@gerry-H81M-DS2:/temp/files$ touch readme.txt
gerry@gerry-H81M-DS2:/temp/files$ vi readme.txt
gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt
Git is a version control system.
Git is free software.
gerry@gerry-H81M-DS2:/temp/files$ git add readme.txt
gerry@gerry-H81M-DS2:/temp/files$ git commit -m "wrote a readme file"
[master (根提交) 647dda7] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
更新之后查看状态操作
gerry@gerry-H81M-DS2:/temp/files$ vi readme.txt
gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt
Git is a distributed version control system.
Git is free software.
gerry@gerry-H81M-DS2:/temp/files$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改: readme.txt
未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)
.readme.txt.swp
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
看看具体修改了什么内容操作
gerry@gerry-H81M-DS2:/temp/files$ git diff
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
查看历史
gerry@gerry-H81M-DS2:/temp/files$ vi readme.txt
gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
gerry@gerry-H81M-DS2:/temp/files$
gerry@gerry-H81M-DS2:/temp/files$ git add readme.txt
gerry@gerry-H81M-DS2:/temp/files$ git commit -m "append GPL"
[master 44643e9] append GPL
1 file changed, 1 insertion(+), 1 deletion(-)
gerry@gerry-H81M-DS2:/temp/files$
gerry@gerry-H81M-DS2:/temp/files$ git log
commit 44643e9d0d7273941d82b90a092421d7406e6f02
Author: gerry <heyxhazx1003@163.com>
Date: Thu Sep 19 11:44:20 2019 +0800
append GPL
commit a2e20fd9327f034823666b05c1ac313ac1cd9661
Author: gerry <heyxhazx1003@163.com>
Date: Thu Sep 19 11:40:20 2019 +0800
add distributed
commit 647dda76c889395fa35d6dd10c2d47dea1b7f9df
Author: gerry <heyxhazx1003@163.com>
Date: Thu Sep 19 11:34:13 2019 +0800
wrote a readme file
gerry@gerry-H81M-DS2:/temp/files$ git log --pretty=oneline
44643e9d0d7273941d82b90a092421d7406e6f02 append GPL
a2e20fd9327f034823666b05c1ac313ac1cd9661 add distributed
647dda76c889395fa35d6dd10c2d47dea1b7f9df wrote a readme file
版本回退
gerry@gerry-H81M-DS2:/temp/files$ git log --pretty=oneline
44643e9d0d7273941d82b90a092421d7406e6f02 append GPL
a2e20fd9327f034823666b05c1ac313ac1cd9661 add distributed
647dda76c889395fa35d6dd10c2d47dea1b7f9df wrote a readme file
gerry@gerry-H81M-DS2:/temp/files$
gerry@gerry-H81M-DS2:/temp/files$ git reset --hard HEAD^
HEAD 现在位于 a2e20fd add distributed
gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt
Git is a distributed version control system.
Git is free software.
gerry@gerry-H81M-DS2:/temp/files$ git log
commit a2e20fd9327f034823666b05c1ac313ac1cd9661
Author: gerry <heyxhazx1003@163.com>
Date: Thu Sep 19 11:40:20 2019 +0800
add distributed
commit 647dda76c889395fa35d6dd10c2d47dea1b7f9df
Author: gerry <heyxhazx1003@163.com>
Date: Thu Sep 19 11:34:13 2019 +0800
wrote a readme file
gerry@gerry-H81M-DS2:/temp/files$ git reset --hard 44643e
HEAD 现在位于 44643e9 append GPL
gerry@gerry-H81M-DS2:/temp/files$ git log
commit 44643e9d0d7273941d82b90a092421d7406e6f02
Author: gerry <heyxhazx1003@163.com>
Date: Thu Sep 19 11:44:20 2019 +0800
append GPL
commit a2e20fd9327f034823666b05c1ac313ac1cd9661
Author: gerry <heyxhazx1003@163.com>
Date: Thu Sep 19 11:40:20 2019 +0800
add distributed
commit 647dda76c889395fa35d6dd10c2d47dea1b7f9df
Author: gerry <heyxhazx1003@163.com>
Date: Thu Sep 19 11:34:13 2019 +0800
wrote a readme file
gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
查看每一次的操作记录
gerry@gerry-H81M-DS2:/temp/files$ git reflog
44643e9 HEAD@{0}: reset: moving to 44643e
a2e20fd HEAD@{1}: reset: moving to HEAD^
44643e9 HEAD@{2}: commit: append GPL
a2e20fd HEAD@{3}: commit: add distributed
647dda7 HEAD@{4}: commit (initial): wrote a readme file
查看工作区和版本库里面最新版本的区别
gerry@gerry-H81M-DS2:/temp/files$ git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index 8443d23..a824bbc 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
Git is a distributed version control system.
Git is free software distributed under the GPL.
+Git has a mutable idnex called stage.
丢弃工作区的修改
gerry@gerry-H81M-DS2:/temp/files$ vi readme.txt
gerry@gerry-H81M-DS2:/temp/files$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改: readme.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
gerry@gerry-H81M-DS2:/temp/files$ git checkout -- readme.txt
gerry@gerry-H81M-DS2:/temp/files$ git status
位于分支 master
无文件要提交,干净的工作区
git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令
丢弃暂缓区的修改
gerry@gerry-H81M-DS2:/temp/files$ vi readme.txt
gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable idnex called stage.
My stupid boss still prefers SVN.
gerry@gerry-H81M-DS2:/temp/files$ git add readme.txt
gerry@gerry-H81M-DS2:/temp/files$ git status
位于分支 master
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)
修改: readme.txt
gerry@gerry-H81M-DS2:/temp/files$ git reset HEAD readme.txt
重置后取消暂存的变更:
M readme.txt
gerry@gerry-H81M-DS2:/temp/files$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改: readme.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
gerry@gerry-H81M-DS2:/temp/files$ git checkout -- readme.txt
gerry@gerry-H81M-DS2:/temp/files$ git status
位于分支 master
无文件要提交,干净的工作区
删除文件
确定删除
gerry@gerry-H81M-DS2:/temp/files$ touch hello.txt
gerry@gerry-H81M-DS2:/temp/files$ git status
位于分支 master
未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)
hello.txt
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
gerry@gerry-H81M-DS2:/temp/files$ git add hello.txt
gerry@gerry-H81M-DS2:/temp/files$ git commit -m "add hello.txt file"
[master 945402c] add hello.txt file
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 hello.txt
gerry@gerry-H81M-DS2:/temp/files$ rm hello.txt
gerry@gerry-H81M-DS2:/temp/files$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add/rm <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
删除: hello.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
gerry@gerry-H81M-DS2:/temp/files$ git rm hello.txt
rm 'hello.txt'
gerry@gerry-H81M-DS2:/temp/files$ git commit -m "remove hello.txt"
[master fb14536] remove hello.txt
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 hello.txt
取消删除
gerry@gerry-H81M-DS2:/temp/files$ touch hello.txt
gerry@gerry-H81M-DS2:/temp/files$ git add hello.txt
gerry@gerry-H81M-DS2:/temp/files$ git commit -m "add file"
[master d600b99] add file
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 hello.txt
gerry@gerry-H81M-DS2:/temp/files$ git status
位于分支 master
无文件要提交,干净的工作区
gerry@gerry-H81M-DS2:/temp/files$ rm hello.txt
gerry@gerry-H81M-DS2:/temp/files$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add/rm <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
删除: hello.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
gerry@gerry-H81M-DS2:/temp/files$ git checkout -- hello.txt
gerry@gerry-H81M-DS2:/temp/files$ ls
hello.txt readme.txt
远程仓库
查看是否有秘钥
//在用户主目录
gerry@gerry-H81M-DS2:~$ cd .ssh
gerry@gerry-H81M-DS2:~/.ssh$ ls
id_rsa id_rsa.pub known_hosts
gerry@gerry-H81M-DS2:~/.ssh$
如果没有,那么就需要创建
$ ssh-keygen -t rsa -C "youremail@example.com"
然后一路同意回车即可
有了秘钥之后
我们把公钥配置到我们的github上面即可,具体操作步骤自行百度
id_rsa.pub是公钥
提交
//先关联
$ git remote add origin git@github.com:michaelliao/learngit.git
//提交
$ git push -u origin master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
Total 20 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:michaelliao/learngit.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
$ git push origin master
新建分支
new
git switch -c dev
gerry@gerry-H81M-DS2:/temp/files$ git checkout -b dev
切换到一个新分支 'dev'
gerry@gerry-H81M-DS2:/temp/files$ git branch
* dev
master
gerry@gerry-H81M-DS2:/temp/files$ vi readme.txt
gerry@gerry-H81M-DS2:/temp/files$ git add readme.txt
gerry@gerry-H81M-DS2:/temp/files$ git commit -m "branch test"
[dev 55e220b] branch test
1 file changed, 1 insertion(+)
gerry@gerry-H81M-DS2:/temp/files$ git checkout master
切换到分支 'master'
//$ git switch master
gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable idnex called stage.
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
合并分支
gerry@gerry-H81M-DS2:/temp/files$ git checkout master
切换到分支 'master'
gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable idnex called stage.
gerry@gerry-H81M-DS2:/temp/files$ git branch
dev
* master
gerry@gerry-H81M-DS2:/temp/files$ git merge dev
更新 d600b99..55e220b
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
gerry@gerry-H81M-DS2:/temp/files$ git status
位于分支 master
无文件要提交,干净的工作区
gerry@gerry-H81M-DS2:/temp/files$ git log
commit 55e220bdd233fe0f9c63bb6ea8246e8eac2fd5eb
Author: gerry <heyxhazx1003@163.com>
Date: Thu Sep 19 12:28:38 2019 +0800
branch test
commit d600b996dcaf8d8aa1fcfb0d18cb3aa1f59ffdc0
Author: gerry <heyxhazx1003@163.com>
Date: Thu Sep 19 12:12:51 2019 +0800
add file
commit fb14536102f0a530f806786a6f72c848ee8519fb
Author: gerry <heyxhazx1003@163.com>
Date: Thu Sep 19 12:11:35 2019 +0800
remove hello.txt
commit 945402ceeff41ac8774ed547ce0360e263ba3080
Author: gerry <heyxhazx1003@163.com>
Date: Thu Sep 19 12:10:18 2019 +0800
add hello.txt file
gerry@gerry-H81M-DS2:/temp/files$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable idnex called stage.
Create a new branch is quick.
删除分支
gerry@gerry-H81M-DS2:/temp/files$ git branch -d dev
已删除分支 dev(曾为 55e220b)。
gerry@gerry-H81M-DS2:/temp/files$ git branch
* master
查看分支合并情况
git log --graph --pretty=oneline --abbrev-commit
* c44a846 conflict fixed
|\
| * 23e6df6 AND simple
* | b508aed & simple
|/
* a3b43ce AND simple
* 55e220b branch test
* d600b99 add file
* fb14536 remove hello.txt
* 945402c add hello.txt file
* 7a9ccd4 change
* 44643e9 append GPL
* a2e20fd add distributed
* 647dda7 wrote a readme file
网友评论