Git使用笔记

Git使用笔记


搭建Git

首先安装Git ,一句命令 sudo apt-get install git
然后设置你的密码和email,不然谁知道是你提交的更改

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

这里用了global参数,表示这台机器上所有的git仓库都会使用这个配置,当然,你也可以对某个仓库制定不同的用户名和Email地址


创建版本库

找到一个你觉得顺眼的地方,然后大方敲出一行git init

$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

然后就又一个版本库了,当然,你直接ls是看不到的,因为它偷偷藏起来了,你需要ls -ah才能看到(这个时候在当前目录下就会多一个.git文件,没事被手贱乱改啊,不然崩了你就GG了)
然后你在当前目录以及子目录下的文件都可以提交到Git仓库里面,相比把大象放到冰箱需要三步,把东西扔进git只需要两步
首先,用git add把东西扔进去

$ git add readme.txt

然后用git commit -m把文件提交到仓库中

$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

注意,-m这个参数后面输入的是你对本次提交的说明,当然,你可以啥都不干,然而这样做不好,输入说明对自己和别人阅读都很重要

为啥提交需要两步呢?这是因为commit可以一次性提交多个文件,你可以多次add不同的文件

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

时光机穿梭

git status命令可以查看仓库的当前状态,它会告诉你哪些东西做了改动

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#    modified:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

然而,但是如果你想知道具体在文件的哪里改了,这个时候你就要用git diff来查看具体的修改内容了。

$ git diff readme.txt 
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.

成功commit之后再用git status来查看仓库状态的时候,就会显示当前没有要提交的修改,而且工作目录是干净的(working directory clean)

$ git status
# On branch master
nothing to commit (working directory clean)

版本退回

git log 可以查看提交日志

$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 15:11:49 2013 +0800

    append GPL

commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 14:53:12 2013 +0800

    add distributed

commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 19 17:51:55 2013 +0800

    wrote a readme file

如果你嫌参数过多,可以用git log --pretty=oneline

$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file

这个时候你可以看到有一大堆数字,那是每个版本号的commit id,由SHA1计算出来的一个很大的数字(十六进制)
如果需要倒退上一个版本的话,用git reset --hard HEAD^
(一个^表示倒退一个版本,如果倒退的版本过多,可以用HEAF~100这样的命令来表示)

$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed

也可以通过指定id号来回到某个版本(版本号很长的说,你输入前五六位这样基本就可以找到的了)

$ git reset --hard 3628164
HEAD is now at 3628164 append GPL

如果忘记了版本号,可以通过 git reflog来找到你每一次的命令,在这里你可以找到对应的commit_id

$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file

工作区和暂存区

工作区:就是在电脑中能看到的目录
版本库:工作区中有一个隐藏目录.git,这个不算是工作区,而是git的版本库
在版本库中,有一个叫做stage(或者叫index)的暂存区,还有一个git为我们自动生成的第一个分支master,以及一个指向master的指针HEAD
当我们用git add提交修改的时候,就是把东西提交到缓存区
当我们用git commit提交更改时,就是把暂存区中的东西提交到当前分支中去


管理修改

Git管理的是修改,而不是文件
当你用git add后,Git把修改提交到暂存区,准备提交,然后你再次修改文件之后直接git commit,这个时候你会发现第二次修改并没有提交到分支中去,这是因为commit只会把暂存区中的修改提交,新的修改没有用git add提交到暂存区
如果你不信可以用 git diff HEAD --filename来查看工作区的文件和版本库的文件有什么不一样
所以记住,不add到暂存区,就不会加入commit中


撤销修改

如果你写错了代码,可以用git status查看,这个时候git会提醒你,用git checkout – file 可以丢弃工作区的修改

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

命令git checkout – file 的意思是,把file文件在工作区的修改全部撤销,这里有两种情况
第一,你还没有把它放进暂存区,这个时候撤销就回到和版本库一模一样的状态
第二,它之前已经提交到暂存区了,现在又做了修改,现在撤销就回到了添加暂存区后的状态

如果你的错误代码已经提交到了暂存区中的话,用git status查看的话,它也为会提醒你可以用git reset HEAD file 把修改撤销掉,重新放回工作区(用HEAD表示最新版本)

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   readme.txt
#
$ git reset HEAD readme.txt
Unstaged changes after reset:
M       readme.txt

放回工作区之后再通过git checkout 来丢弃工作区的修改

$ git checkout -- readme.txt

$ git status
# On branch master
nothing to commit (working directory clean)

如果你已经commit到分支中了的话,没事,用上面学的版本退回就好,然而……如果你把修改提交到远程仓库之后,那么不好意思,你已经GG了


删除文件

在Git中想要删除一个文件的话,直接在工作区用rm把它删了,这个时候你用git status查看的话,它就会告诉你啥文件被删了,

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    test.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

这个时候你有两种选择,第一是确实要从版本库中删除这个文件,这个时候就用git rm 来删除掉,并且commit

$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt

第二种情况是你自己突然脑抽误删的,这个时候你可以用git checkout – file 来把误删的文件恢复到最新版本

$ git checkout -- test.txt

远程仓库


创建私钥和公钥

在用户的主目录下,查看有没有.ssh这个目录,该目录下有木有id_rsa和id_rsa.pub这两个文件,如果有就跳过这里,没有的话要手动配置

$ ssh-keygen -t rsa -C "youremail@example.com"

把邮箱替换成你自己的邮箱,然后一路回车用默认值就可以了,这样就能创建好私钥和公钥了,公钥你随便给别人也无所谓,但是私钥千万不能透露


Coding关联公钥

登录Coding,进入你的个人页面选中左侧菜单栏的帐户,然后选择SSH公钥,在页面下把你的id_rsa.pub的内容复制到里面,然后保存就可以了,这个时候你的账号就关联这个公钥了,通过git就可以连接到项目的远程仓库了


添加远程仓库

这个时候你可以连接到远程仓库了,然而要怎么连接呢
首先你要进入我们项目的仓库复制SSH连接的地址

$ git remote add origin git@git.coding.net:PurposeDragon/SupportGroupOfYP.git

(这个例子中的仓库真的是我们项目的仓库,当然,谁都能关联,然而没有公钥不能推送)
添加之后,远程仓库的名字就是我们命令行中给他设定的名字 origin (国际惯例,让人一看就知道这是远程仓库的意思)

然后我们可以用git push命令,把分支推送到远程仓库

$ git push -u origin master
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (19/19), 13.73 KiB, done.
Total 23 (delta 6), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

如果仓库是空的话,我们要加上-u参数,当然,我们现在上面有东西了,不用这个参数
值得注意的是,如果我们是第一次连接的话,是会有一个ssh的警告的,你直接一个yes就可以了,以后这个警告就不会出现的了

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?

克隆代码库

我们可以用clone直接把远程仓库中的东西下载到本地

$ git clone git@github.com:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

$ cd gitskills
$ ls
README.md

这样我们就可以把仓库中的东西轻松地下到本地了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值