• 主页
  • 关于
    • 五斤 photo

      五斤

      '今天也要搬很多砖呢.'

    • 关于
    • Email
    • Instagram
    • Github
  • 文章
    • 所有文章
    • 所有标签
  • 相册
  • 友链
  • 订阅

Git使用小结(一)

10 Apr 2017 | 已载入 次

花费 ~6 分钟

趁着最近在做一个基于Github的开源作业库,决定把Git操作写一写。

Git的安装

首先你要下载Git软件:下载链接

安装过程很普通。装完以后在右键菜单里看见Git GUI Here和Git Bash Here就安装成功了。

SSH key配置

Github,Bitbucket是国外较著名的项目托管平台,速度较慢,可以用国内的Coding,速度还不错。要使用这些远程的平台的仓库,需要SSH的配置。

以Github举例。在Github用邮箱注册完帐号,在本地通过Git Bash打开命令行窗口,生成SSH key语句如下:

ssh-keygen -t rsa -C "xxx@xxx.com"

弹出的第一个问题是填写存放的文件名,比如我写id_rsa,后面的设置密码直接回车,这时在~/.ssh目录下多了id_rsa和id_rsa.pub两个文件。前者是生成的私钥,后者是公钥。将公钥填写在代码托管平台的SSH配置里,这样就可以使用了。

多个SSH key的配置

如果要配置两个Github的帐号怎么办?同样输入:

ssh-keygen -t rsa -C "xxxx@xxx.com"

填写存放的文件名不要和已有的一样,就不会覆盖,比如我写second,这样就生成了second和second.pub两个文件。还需要新建default文件对两个SSH key进行配置:

touch ~/.ssh/config

defualt文件中的Host是映射在本地的Host,用以区分你要使用的Git帐号,而HostName是真正的访问服务器地址。

  #defualt
    Host github.com
        HostName github.com
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/id_rsa
        User chairyfish
  
  #second
  Host git.github.com
        HostName github.com
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/second
        User CUGpotato

别忘了在Github添加公钥~打开命令行测试:

ssh -T git@github.com      #测试第一个帐号
ssh -T git@git.github.com  #测试第二个帐号

第一句会返回Hi,chairyfish! You’ve successfully authenticated,but Github does not provide shell access.

第二句会返回Hi,CUGpotato! You’ve successfully authenticated,but Github does not provide shell access.

这样就测试成功了。下面就可以上传本地代码到远程仓库了。

上传代码到远程仓库

在github添加仓库,命名为CUG-Asmtlib。

在需要新建本地仓库的文件夹下执行bash,输入git init,可以看到新生成.git文件夹。

将文件添加到仓库,很简单:

git add index.html        #添加文件
git add CSS/Layer         #添加文件夹

然后提交修改:

git commit -m "添加了index.html和CSS文件夹"

新建README.md,用来写项目说明,当然也不是一定要。

touch README.md

添加远程仓库的地址,建议用ssh:

#因为我们使用的是第二个帐号,所以改成git.github.com
git remote add origin git@git.github.com:CUGpotato/CUG-Asmtlib.git

最后pull到远程仓库:

git push -u origin master

如果没有上传成功,可能是由于代码冲突,可以将远程仓库pull到本地:

git pull git@git.github.com:CUGpotato/CUG-Asmtlib.git

然后再push就解决了。

版本回退

查看提交记录,每次提交都有一个唯一的记录值commit id:

git log
#下面是记录结果
commit 0cae52557b45e267e827fb69dde7ffc3fef31996
Author: chairyfish <chairyfish@gmail.com>
Date:   Mon Apr 10 17:51:28 2017 +0800
    上传了C语言课程设计

commit 262a3fa01b279473fe5e105ed7d3264f8f64ba99
Author: chairyfish <chairyfish@gmail.com>
Date:   Fri Apr 7 15:29:25 2017 +0800
    提交了复习资料

回退到上一版本:

git reset --hard HEAD

这样的回退会使commit的次数-1,但是如果还记得原来的版本号,可以回到未来的版本:

git reset --hard 0cae525

但是如果已经push了,怎样撤销错误提交?先查到想退回版本的commit id,再执行:

git revert #commit id

revert可以优雅地撤销到制定版本并commit。commit记录不会删除,而是创建一个新的提交来撤销更改。最后进行push操作,远程代码就回退完成了。

fork项目与原项目的同步

当我们用第一个帐号fork了CUG-Asmtlib这个项目,这个项目就新生成了一个分支克隆到仓库。当我们在fork的项目上提进行了修改,原项目的的仓库并不会受到影响,如果我们想在fork的项目上向原项目提交修改,可以发起Pull request。原项目的管理员看到了以后可以选择merge,就可以覆盖原项目了。而这时如果原项目又进行了修改,fork的项目是不会进行自动同步的。如果想要和原项目同步,可以这么执行——

先指定上游仓库:

#此处是github.com,因为fork项目在使用第一个帐号。
git remote add upstream git@github.com:CUGpotato/CUG-Asmtlib.git

从上游仓库获取到分支,及相关的提交信息,并保存到本地的upstream/master分支:

git fetch upstream

这时本地文件并没有改变。切换到本地的master分支:

git checkout master

把 upstream/master 分支合并到本地的 master 分支,本地的修改依旧会保留:

git merge upstream/master

最后将本地仓库push到自己的远程仓库,就可以了。

友情提醒:评论区翻墙后可用~



教程 分享 Tweet +1