Git基础使用

来源:互联网 发布:淘宝店铺修改最低折扣 编辑:程序博客网 时间:2024/05/27 14:13

PS:懒惰的笔者偷懒了三个多月,懊悔中~~~~~~~~~~~~~

最近一次提交被Git虐得体无完肤,顺带把整个Git过了一遍,并且整理下,以方便以后使用。
按照惯例,先是提供一个很好的教程:

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
笔者刚开始学的时候都是英文资料,学了个一知半解,现在这位仁兄的讲解灰常详细,想系统学的话还是建议大家跟着教程来了,我这只是做一个简单个人小结。

I. 配置

一般而言有两种方式,因为笔者用的是SSH方式,那么这里就只涉及SSH方式啦。
首先在配置文件中的network先要选择ssh.exe才可使用,笔者配置如下:


然后只有关键的两步:
1. 生成SSH Keys
在cmd中直接执行ssh-keygen.exe即可,引号内容可以任意设置

"C:\Program Files (x86)\Git\bin\ssh-keygen.exe" -t rsa -b 2048 -N "" -C "Eric Peng SSH keys. Email: Eric.Peng@xxx.com"
成功一般有三行提示,分别涉及id_rsa, id_rsa.pubkey fingerprint三项,比如:


C:\Users\eric>"C:\Program Files (x86)\Git\bin\ssh-keygen.exe" -t rsa -b 2048 -C "Eric Peng SSH keys. Email: Eric.Peng@xxx.com"
 
Generating public/private rsa key pair.
 
Enter file in which to save the key (//.ssh/id_rsa):
 
Your identification has been saved in c:\users\eric\.ssh\id_rsa.
 
Your public key has been saved in c:\users\eric\.ssh\id_rsa.pub.
 
The key fingerprint is:
 
3d:8a:84:ae:9e:59:9a:d8:c3:5c:f1:ae:ae:db:92:04 Eric Peng SSH keys. Email: Eric.Peng@xxx.com


2. 添加SSH Keys

很自然,有了Key就要想办法利用,那么通过服务器管理就是好方法了,一般而言大家在GitHub中的SSH Key中设置就可以了,秘钥内容就是在id_rsa.pub中找到即可。
笔者用的是Stash,直接上图,在Account中可以找到SSH Keys加以设置,直接上图。


II. 建库

首先有三个命令是非常重要的,那就是 git status, git log git diff。其中,前两者都是详细记录了库的状态,待修改的文件与操作日志,而最后一个,则是对文件修改的对比,方便大家Review。
建库很简单,定位到你打算建库的文件夹(尽量没有中文和特殊字符),然后执行Git init就完成了,给出笔者在Git Bash中的示例吧:

pengjunc@WIN-OPN8RC43ECJ /c/PJC/GitRepository
$ git init
Initialized empty Git repository in c:/PJC/GitRepository/.git/


前面我们有提到,使用服务器来管理我们的项目,那么这就涉及到远程库的操作了。
首先在服务器的页面上新建一个Git库,随后回到本地打算关联的库执行:
git remote add origin git@github.com:Account/GitRepository.git

Account是你在Github上的账户名,这样执行后,远程库的名字就是origin,当然也可以根据需要。
如何推送本地库到远程库呢?一般是使用git push命令,第一次关联加变参 -u进行关联即可。

现在我们已经和远程库做好了关联,那么怎么从远程库取下我们需要的东西呢?
这时候git clone登场,作用类似于SVN中的Checkout。 
比如笔者用的是stash,那么克隆命令类似于这样:

git clone ssh://pengjunc@PENGJUNC1@mydtbld0005.isr.com:7999/Demo/demo.git

笔者就不作更多演示了,有疑惑的朋友可以直接参考开头给出的资料。

III. 基本文件添加与修改

在这一部分也只有两个命令: git addgit commit。当然你可以通过git status随时确认库状态,是否和你所预想的一样。
而要添加或修改的文件,自然要放在库的文件夹下面,至于是子文件夹还是啥就无所谓了,然后分别执行git addgit commit即可。
下面是笔者进行的一系列操作:

pengjunc@WIN-OPN8RC43ECJ /c/PJC/GitRepository (master)
$ git add readme.txt

pengjunc@WIN-OPN8RC43ECJ /c/PJC/GitRepository (master)
$ git commit -m "This is our first step to add one file"
[master (root-commit) f197419] This is our first step to a
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

pengjunc@WIN-OPN8RC43ECJ /c/PJC/GitRepository (master)
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be commit
#   (use "git checkout -- <file>..." to discard changes in
#
#       modified:   readme.txt
#
no changes added to commit (use "git add" and/or "git comm

pengjunc@WIN-OPN8RC43ECJ /c/PJC/GitRepository (master)
$ git diff
diff --git a/readme.txt b/readme.txt
index 867cfef..903dd1a 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
 Git is a version control system.
-This is our first step to add one file.
\ No newline at end of file
+This is our first step to add one file.
+First Edit: Git is free software.
\ No newline at end of file


再次修改后提交
pengjunc@WIN-OPN8RC43ECJ /c/PJC/GitRepository (master)
$ git add readme.txt

pengjunc@WIN-OPN8RC43ECJ /c/PJC/GitRepository (master)
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   readme.txt
#

pengjunc@WIN-OPN8RC43ECJ /c/PJC/GitRepository (master)
$ git commit -m "Add one line. Now 3 lines."
[master 43aa999] Add one line. Now 3 lines.
 1 file changed, 2 insertions(+), 1 deletion(-)

pengjunc@WIN-OPN8RC43ECJ /c/PJC/GitRepository (master)
$ git status
# On branch master
nothing to commit, working directory clean


至此,文件简单的添加修改就已经完成了,是不是超简单?
到这里,你已经学会了最最基本的Git操作。

IV. 回到过去

回退版本或任意版本
HEAD永远指向当前版本,而HEAD^则是上一版本,如果要前100个版本呢?那就是HEAD~100啦
版本跳转使用Git reset来进行,而git log为提交历史,git relog查看命令历史。
这些基本命令就构成了任意版本跳转。

文件还原
那么文件复原呢?那就是git checkout的作用了,它会将工作区的文件还原到commit或add之前的状态,即还原文件。
如果你连已经add的文件都不要呢?这时候就先reset下再checkout就可以了。

删除文件
删除文件则是使用git rm随后 git commit下即可。

V. 分支管理

这一部分是git最重要的部分了,笔者虽然可以使用,但还远未到精通的地步,所以请大家移步
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743862006503a1c5bf5a783434581661a3cc2084efa000
进行学习。


简而言之,分支管理类似于编程中的链表合并,而链表的内容则是根据时间轴确定的修改


使用git branch可以查看当前所有的分支,而git branch name则可以创建分支。
git branch -d namegit branch -D name用于分支的删除。
git checkout可以切换分支,加变参-b可以新建分支。
git merge则用于合并分支,当然也可以使用git fetchgit rebase的结合来合并,笔者的实际项目中使用后者更多,因为merge容易引起冲突,解决这些冲突有时候很麻烦。
还有一个重要命令,那就是git stash,这个事干嘛的呢?将修改存储,以便以后使用 git stash apply恢复现场。类似于word中另存为的功能,只是更明了,切换更方便。
对于分支的合理使用才是Git最大的魅力所在。
而至于标签管理,由于笔者也不太用,就不在这讲述了。

当然,上面的仅仅只是基础,更多使用还待各位在项目中发掘啦。

这么点东西也写了好久,哎,午睡,欢迎各位补充各种技巧哦~


#Oct 22nd, 2014 Added

昨个在VM上搞Git,死活搞不出来,提示就是:

        The authenticity of host '' can't be established.

         RSA key fingerprint is xxx.

         Are you sure you want to continue connecting (yes/no)?

即便选了yes也是行不通啊,各种郁闷。

后来网上找个方法

    ssh  -o StrictHostKeyChecking=no  192.168.xxx.xxx
笔者满怀期待去试了下,继续无效,然后就郁闷了,试了各种方法无效,笔者只好黯然退场。

不过今个重新整了下,理了下思路,1、ssh-keygen出错  2、验证授权有问题

拷贝一个曾经授权的文件过来,成功从stash上拉取数据,即便是使用新的之前失败的用户名也一样,所以做出了判断:不是figerprint不一致导致的,那么问题在哪?

主要是目录问题,将之前授权的文件放入C:\Users\用户名\.ssh(VM自建立时禁止了一些功能,所以生成秘钥选择了别的文件夹)中后,虽然同样会有提示,但yes后就能接着授权从而拉取数据了。

Mark下,要是大家也遇到这问题,可以参考下。

顺带今个还使用了下Cherry-pick,不好玩o(╯□╰)o


0 0
原创粉丝点击