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协议方式。
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开头的样式,可以通过下图看出链接:

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

浙公网安备 33010602011771号