Git

1、Git安装(windows版本)

参考:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

从git官网(https://git-scm.com/downloads)直接下载windows版本程序,然后按默认选项安装即可。安装完成后,在开始菜单找到"Git"->"Git Bash",跳出一个命令行窗口即说明安装成功。

另mac安装文档:https://www.jianshu.com/p/c058fbd7bb90

 

2、创建版本库(以下mac、Windows通用)

利用"cd /d"命令切换至d盘根目录,然后使用创建版本库命令创建名为git_repository的版本库:

$ mkdir git_repository

然后可以使用pwd命令显示仓库当前目录。

利用命令"cd git_repository"切换至版本库目录中,然后利用git init命令将该目录变成Git可以管理的仓库:

$ git init
Initialized empty Git repository in D:/git_repository/.git/

3、使用git下载项目

写在前面:

对于本地和远程都有的分支,如果更新本地到远程,先把原来分支拉取下来并合并,否则直接更新会有冲突失败,具体见 ”6、更新远程代码到本地仓库“】

【默认分支不一定是master,可以自由设置,git点进去的是默认分支】

【错误1:】

Fix GitLab error: “you are not allowed to push code to protected branches on this project”?

https://www.cnblogs.com/everfight/p/protected_branches.html 

问题原因:原来gitlab对应的分支进行分支保护设置。
解决方法:"Settings" -> "Repository" -> scroll down to "Protected branches" 改成unprotected就好。

 

3.1、查看项目地址,以自己项目gitskills为例,打开github后,在右上角头像上点击会有“Your Profile”(如果你已经登录),点击进入的网页链接就是你的github地址,项目地址是github地址加上项目名称,例子:https://github.com/chease3640/gitskills。然后进入一个版本库目录中,使用clone命令下载即可。

第一种情况:直接从远程Git拉取(特定分支)到本地

$ git clone https://github.com/chease3640/gitskills

$ git clone
-b  branch0  https://github.com/chease3640/gitskills #拉取特定分支

 

第二种情况:使用Git拉取master,并创建一个新分支,在新分支上上传一个文件,并推送到远程

$ git clone git@xxx.xxx.org:ecom/arnold_helloworld_ky.git #从远程拉取git库
$ cd arnold_helloworld_ky
$ git checkout -b init #在本地创建新分支init,并切换到init分支
$ vim run.sh #新建文件,并写入内容 #!/bin/bash echo "Hello world!"
$ git status
$ git add run.sh #add
$ git status
$ git commit -m "init with hello" #commit
$ git push -u origin init #想远程Git库push init分支

 

第三种情况:创建一个新的库,将本地代码上传并初始化:首先在git页面创建一个git库,将本地代码上传到远程库,并建立连接:

$ git clone git@xxx.xxx.org:ecom/arnold_helloworld_ky.git #从远程拉取git库,在本地可以看到一个空的arnold_helloworld_ky文件夹

$ cd arnold_helloworld_ky #进入文件夹,在本地将目标代码拷入该文件夹

#刚clone后本地还没有创建master分支,要先commit之后才会真正建立master分支,此时才可以建立其它分支。 https://www.jianshu.com/p/4a763a290d0f 。否则会报错 fatal: Not a valid object name: 'master'.
$ git add .
$ git commit -m "注释内容" 

$ git branch init #在本地创建新分支init
$ git branch //查看所有分支
$ git checkout init //切换到分支init
$ git remote -v #查看远程仓库地址
$ git status

$ git add .
#add
$ git status
$ git commit
-m "init with hello" #commit
$ git push -u origin init #向远程Git库push init分支
$ git push -u origin #向远程Git库push主分支

 

第四种情况:本地和远程仓库连接已经建立,需要希望删除本地仓库文件夹,重新拉新代码(比如有代码冲突时),这时需要:

1. 删除本地仓库文件夹

2.直接重新拉取远程仓库,主注意不要新建目录

 

4、git常用操作

$ cd D:
$ cd Git  //先进入D盘,再进入Git文件夹
$ cd ..   //返回上一级目录
$ pwd //查看当前目录

$ git branch temp //分支创建
$ git status //查看当前状态,可以查看当前处于未跟踪状态, 放入暂存区等待提交等状态
$ git branch //查看所有分支
$ git checkout dev  //切换到分支dev 

5、向远程仓库提交

5.1、配置远程仓库

$ git remote add origin git@gitlab.xxx-inc.com:lbs_data/textflow.git  //添加一个新的远程仓库,并指定别名origin

$ git remote   //列出所有远程库

$ git remote rename origin origin02 #修改别名
$ git remote remove origin #删除别名

5.2、本地修改提交至远程仓库

首先进入待提交的工程目录下,然后进行以下操作:

$  git add .   // 提交全部文件到暂存区,也可以指定某个文件: git add abc.txt

$  git commit -m "first commit" //从暂存区提交到本地版本库

$  git push -u origin master //把本地仓库的文件推送到远程(origin对应的远程仓库)仓库分支master
$  git push -u origin temp //把本地仓库的文件推送到远程(origin对应的远程仓库)仓库分支temp,注意需要切换到temp分支状态才能向对应分支提交
 

也可以直接只提交单个文件,首先进入待提交的文件所在文件夹,然后git add file_name,然后再commit、push.

如果出现"git log 中发现 xxx@xx.com 邮箱不符合要求,请务必使用xx邮箱",可以通过项目的管理员去掉项目的 Email 验证限制即可!

 

https://blog.csdn.net/gaoying_blogs/article/details/53337112

git add的更进一步用法:

· git add -A 提交所有变化

· git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)

· git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件

5.3、版本回退

$ git log //查看版本记录

commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:06:15 2018 +0800

    append GPL

commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:03:36 2018 +0800

    add distributed

//1094adb7b9...就是版本号

$ git reset --hard HEAD^   //回退上一版本, HEAD^^上上版本,依次类推

$ git reset --hard 1094a  //回退特定版本,版本号不需写全,git会自动查找

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000/

6、更新远程代码到本地仓库

$ git remote -v   //查看远程仓库版本

$ git fetch origin master  //从远程获取最新版本到本地

$ git log -p master.. origin/master  //比较本地的仓库和远程参考的区别

$ git merge origin/master  //把远程下载下来的代码合并到本地仓库,远程的和本地的合并


//第二种方式
$ git fetch origin master:temp //从远程的origin仓库的master分支下载到本地并新建一个分支temp

$ git diff temp //比较本地的仓库和远程参考的区别

git merge temp  //合并temp分支到master分支

$ git branch -D temp  //如果不想要temp分支了,可以删除此分支

参考 https://www.cnblogs.com/zknublx/p/6113667.html

7、合并分支出现冲突解决办法

7.1、手动解决

当两条分支对同一个文件的同一个文本块进行了不同的修改,并试图合并时,Git不能自动合并的,称之为冲突(conflict)。解决冲突需要人工处理。

比如当前在master分支,想把dev分支merge过来,结果产生了一个冲突,打开文件内容可以看到这么一个冲突:

<<<<<<< HEAD
test in master
=======
test in dev
>>>>>>> dev

<<<<<<<标记冲突开始,后面跟的是当前分支中的内容。

HEAD指向当前分支末梢的提交。

=======之后,>>>>>>>之前是要merge过来的另一条分支上的代码。

>>>>>>>之后的dev是该分支的名字。

对于简单的合并,手工编辑本地文件,然后去掉这些标记,最后像往常的提交一样先add再commit即可。

7.2、使用工具解决

打开一个比较原始的文件编辑器来清理这些冲突看起来是可行的,但是这样并不简单。使用一个专门的合并工具可以使这个操作变得更容易(如果你已经安装了一个在你的本地计算机上……)。你可以通过 “git config” 命令来设置这个合并工具给 Git。更详细的内容你就要查看这个工具的文档说明了。之后当发生合并冲突时,你可以使用 “git mergetool” 命令来调用这个工具。

例如,我在 Mac 上使用 “Kaleidoscope.app”:

在左边和右边的窗口会标记出那些改动的冲突。比起那些用符号 “<<<<<<<” 和 “>>>>>>>” 来标记冲突的方法来说,这是一个更加优雅的可视化环境。你可以非常方便地选择哪个改动是需要被保留的。位于中间的窗口会显示出处理后的结果,并且你也可以进一步手动编辑它。

现在,当清理文件并得到最终代码后,所有剩下的工作就是将这个结果保存起来,并且马上退出这个合并工具。这样 Git 就会知道你已经完成了这个操作。Git 会在后台对那个文件自动地执行 “git add” 命令。这也标志着冲突已经解决了。如果你_不_使用合并工具,而是手动在文本编辑器中清理这些冲突,你必须手动地将文件标记为已解决状态(通过执行命令 “git add <filename>”)。

最终,当所有的冲突被解决后,你必须通过一个正常的提交操作来完成这个清理合并冲突的工作。

https://www.git-tower.com/learn/git/ebook/cn/command-line/advanced-topics/merge-conflicts

常用的合并工具kdiff3,pycharm也可以。

 

8、使用git协议访问(重要)

转自: https://www.cnblogs.com/superGG1990/p/6844952.html

git支持多种传输协议,当git使用https协议,每次pull, push都会提示要输入密码,使用git(ssh)协议,只需要配置ssh密钥,使用git开头的链接即可,这里只介绍git协议方式。

 
初次使用git的用户要使用git协议大概需要三个步骤:
1)、生成密钥对
2)、设置远程仓库(本文以github为例)上的公钥
3)、把git的 remote url 修改为git协议(以上两个步骤初次设置过以后,以后使用都不需要再次设置,此步骤视以后项目的remote url而定,如果以后其他项目的协议为https则需要此步骤)

 

8.1、生成密钥对


大多数 Git 服务器都会选择使用 SSH 公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的话就要生成一个。生成公钥的过程在所有操作系统上都差不多。首先你要确认一下本机是否已经有一个公钥。

SSH 公钥默认储存在账户的主目录下的 ~/.ssh 目录。进去看看:

$ cd ~/.ssh
$ ls
authorized_keys2  id_dsa       known_hosts config            id_dsa.pub

看一下有没有id_rsa和id_rsa.pub(或者是id_dsa和id_dsa.pub之类成对的文件),有 .pub 后缀的文件就是公钥,另一个文件则是密钥。

假如没有这些文件,甚至连 .ssh 目录都没有,可以用 ssh-keygen 来创建。该程序在 Linux/Mac 系统上由 SSH 包提供,而在 Windows 上则包含在 MSysGit 包里:

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

Creates a new ssh key using the provided email # Generating public/private rsa key pair.

Enter file in which to save the key (/home/you/.ssh/id_rsa):

直接按Enter就行。然后,会提示你输入密码,如下(建议输一个,安全一点[7***a],当然不输也行,应该不会有人闲的无聊冒充你去修改你的代码):

Enter same passphrase again: [Type passphrase again]

完了之后,大概是这样:

Your public key has been saved in /home/you/.ssh/id_rsa.pub.
The key fingerprint is: # 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@youremail.com

到此为止,你本地的密钥对就生成了。

8.2、添加公钥到你的远程仓库(github)

 a、查看你生成的公钥:

$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0X6L1zLL4VHuvGb8aJH3ippTozmReSUzgntvk434aJ/v7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8vR3c8E7CjZN733f5AL8uEYJA+YZevY5UCvEg+umT7PHghKYaJwaCxV7sjYP7Z6V79OMCEAGDNXC26IBMdMgOluQjp6o6j2KAdtRBdCDS/QIU5THQDxJ9lBXjk1fiq9tITo/aXBvjZeD+gH/Apkh/0GbO8VQLiYYmNfqqAHHeXdltORn8N7C9lOa/UW3KM7QdXo6J0GFlBVQeTE/IGqhMS5PMln3 admin@admin-PC

b、登陆你的github帐户。点击你的头像,然后 Settings -> 左栏点击 SSH and GPG keys -> 点击 New SSH key

c、然后你复制上面的公钥内容,粘贴进“Key”文本域内。 title域,自己随便起个名字。主要在某些终端,公钥内容无法使用常见的command+c复制出来,需要使用命令:

cat ~/.ssh/id_rsa.pub

然后再用command+c复制到粘贴板。 https://qastack.cn/programming/18695934/unable-to-copy-ssh-id-rsa-pub 

d、点击 Add key。

完成以后,验证下这个key是不是正常工作:

$ ssh -T git@github.com

Attempts to ssh to github

如果,看到:

Hi xxx! You've successfully authenticated, but GitHub does not # provide shell access.

恭喜你,你的设置已经成功了。

 

然后可以使用git cone git@github.com:xx/xx.git 查看是否成功,注意一定要用ssh协议,所以仓库链接要使用git开头的样式,可以通过下图看出链接:

image

 

8.3、修改git的remote url

 使用命令 git remote -v 查看你当前的 remote url

$ git remote -v
origin https://github.com/someaccount/someproject.git (fetch)
origin https://github.com/someaccount/someproject.git (push)

如果是以上的结果那么说明此项目是使用https协议进行访问的(如果地址是git开头则表示是git协议)

你可以登陆你的github,就像本文开头的图例,你在上面可以看到你的ssh协议相应的url,类似:

 

复制此ssh链接,然后使用命令 git remote set-url 来调整你的url。

git remote set-url origin git@github.com:someaccount/someproject.git

然后你可以再用命令 git remote -v 查看一下,url是否已经变成了ssh地址。

然后你就可以愉快的使用git fetch, git pull , git push,再也不用输入烦人的密码了

 

9、git push避免每次都输入用户名和密码配置

https://blog.csdn.net/sunguannan/article/details/78966903

 

10、eclipse使用git

参考 https://blog.csdn.net/qiyeliuli/article/details/51798725

 

11、pycharm使用git

参考 https://www.jianshu.com/p/2cbc7e497e2b

preferences -> version control -> github,点击添加account,浏览器弹出:

 

点击"Authorize In GitHub" 授权即可。

 

12、将一个本地的工程上传到github

a) 在本地工程目录下,通过命令git init把这个文件夹变成Git可管理的仓库:

git init

b) 在Github上创建一个空的Git仓库TES,之后就可以和本地仓库进行关联了,根据创建好的Git仓库页面的提示,可以在本地TEST仓库的命令行输入:

 git remote add origin https://github.com/xxx/TEST.git

c) 然后在本地工程commit即可:

$  git add .   // 提交全部文件到暂存区,也可以指定某个文件: git add abc.txt

$  git commit -m "first commit" //从暂存区提交到本地版本库

$  git push -u origin main //把本地仓库的文件推送到远程仓库

 参考:https://cloud.tencent.com/developer/article/1504684

posted @ 2018-02-13 15:41  chease  阅读(411)  评论(0)    收藏  举报