Git学习

2019-09-19  本文已影响0人  fastcv

初始化操作

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

上一篇下一篇

猜你喜欢

热点阅读