对git的简单使用

本文永久跟新地址:https://my.oschina.net/bysu/blog/1918635

【若要到岸,请摇船:开源中国 不最醉不龟归】

之前对git爱答不理,最近需要用到,真的有点高攀不起感觉...好了,闲话少说,言归正传。

最近摸索着用,整理了一下,有些地方理解不对,还请指正,但请勿拍砖。

有必要的说明就,如下:

1.项目公共仓库(下称:远程仓库);

2.把项目从公共仓库中fork到自己的仓库(下称:个人仓库);

3.从公共仓库把项目clone到本地,并通过git init设置本地git版本管理库(下称:本地版本库)。

以下为本人使用流程。

1.本人从公共仓库把项目fork到个人仓库,然后再通过个人仓库clone到本地,并通过git init设置该目录,进行git版本管理,如下图:

13cae0632f9692f6fdbd47920a1c3a8d078.jpg

2.一般工作的话,都是从主分支中新建一个分支,在新的分支中工作,譬如创建一个新的分支dev。如下图:

a.在完成1,2步骤之后,这时(步骤3)有其他人对远程仓库中的文件A1进行了更改,远程仓库中的A1文件(A1-1,图中标错了,标成文件1-1了)此时里面的内容跟本地仓库中的A1不一样了,此时本地的文件A1还是跟之前的一样,未改变。

b.在本地仓库发生了这些变化,(步骤4)创建了一个dev分支,并在该分支上对本地仓库中的A1进行编辑(A1-2).

e57d4bcff078e6b38967a1d7634cb09560c.jpg

3.经过以上步骤,这时如果需要把本地经过编辑的内容(A1-2)同步到远程仓库,应该怎么做比较好呢?

a.进行下面之前先要进行本地仓库跟远程仓库进行关联,本地仓库跟个人仓库进行关联,完成这两步之后,先在本地master分支把远程仓库中的内容pull下来(步骤5),保证其他人最新的修改,你这边都拿到(为的就是怕到时候你把你的内容push到远仓时,把其他人你上次到这次之间提交的内容覆盖掉),此时本地master和远仓中A1文件,其都为A1-1。

b.把本地仓库dev分支合入本地master分支中(步骤6)。因为此刻本地仓库的dev分支中A1文件为A1-2,这时需要解决A1-1和A1-2之间的冲突,才能把dev分支合入master分支中。此时,本地仓库中的A1文件为A1-3.

19d5176144d3b9827a96cd761462e2de3e7.jpg

c.把本地仓中的内容push到个人仓库中(步骤7),此时个人仓库中的A1文件状态为A1-3.

78d69449847c8af24abadbf03ef1c4f979e.jpg

d.最后把个人仓库中的代码合入远程公共仓库,此时远程公共仓库中文件A1状态为A1-3.

81a9328b7122d131146cb6d7cdb2720c408.jpg

整个过程就是这样子,只要所有人都按照这个流程,都可以保证最终的内容都互相同步。不知不觉又快0点30分了(更新时间:2018年8月3日 00:23:49)。洗洗睡了。

下面附上git对比工具的设置与使用

windows下设置 beyond compare 4 为 git  的对比工具。

首先需要先安装 beyond compare 4 工具,切记需要安装安装版的,不要搞绿色版的。下面BCompare.exe为你自己的实际安装路径。

#difftool 配置
git config --global diff.tool bc4
git config --global difftool.prompt false
git config --global difftool.bc4.cmd '"D:\Application\BeyondCompare 4\BCompare.exe" "$LOCAL" "$REMOTE"'

#mergeftool 配置
git config --global merge.tool bc4
git config --global mergetool.prompt false
git config --global mergetool.bc4.cmd '"D:\Application\BeyondCompare 4\BCompare.exe" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"'
git config --global mergetool.bc4.trustexitcode true

#让git mergetool不再生成备份文件(*.orig)
git config --global mergetool.keepBackup false

--------------------------------------------------------------------------------------------------------------------

安装git客户端后,还需要最后一步设置,在命令行输入:

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

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。

注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

正真使用之前,可以自己搭建一个git服务器,如果只是学习git,没必要这么麻烦。到https://github.com/注册一个自己的账号即可,即可免费获得Git远程仓库。

如果需要从远程库clone东西下来,

由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

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

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第2步:打开https://github.com/settings/keys,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。保存后,就可以clone东西到你的本地了。

----------------------------------------------------------------------------------------------------------------------------------

下面是用到的一些命令。

1.创建本地空白版本库mygit

git init

2.往本地仓库添加文件testFile.txt(该文件需放在上面仓库所在的目录)

vi testFile.txt

往里面随便增加几行文字

abcd

ef

ghijk

3.告诉git,你增加了一个文件

git add testFile.txt  #可多次使用,可一次提交多个文件

4.告诉git,你提交了什么,以便后来者知道情况。

git commit -m "提交内容的说明"

5.修改文件testFile.txt

vi testFile.txt

#把内容改为,如下:
haha

6.可以通过git status命令查看哪些文件被修改了

git status

7.在git add 文件之前,可以通过git diff命令查看上一次的内容是什么

git diff testFile.txt

注:如果已经git add文件才想通过git diff查看上一次的内容是什么,怎么办呢?(据说可以直接通过这个命令git diff --cached)执行以下命令即可

git reset HEAD testFile.txt

8.修改文件的提交跟新增文件的提交一样。

9.查看目前版本之前的提交历史记录

git log  
#或者用下面的命令
git log --pretty=oneline

10.回退历史版本

git reset --hard HEAD^

Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交xxxx...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

11.如果发现回退错了,想回到最新版本,上面的命令HEAD^修改成最新版本的id即可,可通过以下命令查看历史id

git reflog

12.撤销尚未提交到暂存区的修改

git checkout -- fileName

13.撤销已提交到暂存区(git add)的修改

命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区,然后重复步骤12即可

14.删除版本库里面的文件

先删除本地,然后通过git rm删掉,并且git commit,删除版本库。

15.误删本地,从版本库恢复

git checkout -- fileName

16.关联一个远程库,使用命令

git remote add origin git@server-name:path/repo-name.git

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

17.创建分支

首先,我们创建dev分支,然后切换到dev分支:

$ git checkout -b dev
Switched to a new branch 'dev'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

然后,用git branch命令查看当前分支:

$ git branch
* dev
  master

git branch命令会列出所有分支,当前分支前面会标一个*号。

现在,我们把dev分支的工作成果合并到master分支上:

$ git merge dev
Updating d46f35e..b17d20e
Fast-forward
 readme.txt | 1 +
 1 file changed, 1 insertion(+)

git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

当然,也不是每次合并都能Fast-forward,我们后面会讲其他方式的合并。

合并完成后,就可以放心地删除dev分支了:

$ git branch -d dev
Deleted branch dev (was b17d20e).

删除后,查看branch,就只剩下master分支了:

$ git branch
* master

因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

 

 

 

摘自:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

 

转载于:https://my.oschina.net/bysu/blog/1918635

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值