Git&&Github

来源:互联网 发布:gz解压命令 linux 编辑:程序博客网 时间:2024/06/15 18:09

官方文档

https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%BA%8E%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6

快速学习入口

https://try.github.io/levels/1/challenges/3

安装

apt-get install git
默认安装目录:/usr/share
可执行文件路径:/usr/bin/git
(说明:
apt-get方式安装的软件默认安装到/usr/share目录下,apt-get install安装目录是包的维护者确定的,不是用户;
使用命令:dpkg -L packageName 可以知道这个软件包包含了哪些文件;
apt-get方式一般的安装规则:
- 文档一般在 /usr/share
- 可执行文件 /usr/bin
- 配置文件 /etc
- lib文件 /usr/lib

因为ubuntu的默认PATH中包含/usr/bin,所以apt-get方式安装的软件不用配置环境变量即可直接在终端的任意路径下使用其命令,因为系统会根据PATH配置的值去依次寻找目标软件的可执行文件,找到首个则停止寻找,并执行;)

内部原理

见官网文档第九章;
地址:https://git-scm.com/book/zh/v1/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86

Git命令

全局配置

  • git config –global user.name crperlin #git的用户名

  • git config –global user.email crper@outlook.com #git的登录账号

  • git config –global core.editor vim #设置默认编辑器

  • git config –global merge.tool vimdiff #设置默认的对比文件差异工具

  • git config –global color.status auto #显示颜色信息

  • git config –global color.branch auto #显示颜色信息

  • git config –global color.interactive auto #显示颜色信息

  • git config –global color.diff auto #显示颜色信息

  • git config –global push.default simple #简化提交

  • git config –list #查看配置的信息

  • git help config #获取帮助信息

登录git

如果上面的操作没有获取到用户配置,则只能拉取代码,不能修改;因为要想使用git,就要告诉git是谁在使用;

查看git的版本信息
git –version

获取当前登录的用户
git config –global user.name

获取当前登录用户的邮箱
git config –global user.email

设置登录用户名
git config –global user.name ‘userName’//你的github的账号名称(非邮箱)
设置登录邮箱
git config –global user.email ‘email’//你的github的账号绑定的邮箱(xxx@xxx.com)

分支管理

列出本地分支
git branch

列出远端分支
git branch -r

列出所有分支
git branch -a

查看各个分支最后一个提交对象的信息
git branch -v

查看已经合并到当前分支的分支
git branch –merge

查看未合并到当前分支的分支
git branch –no-merge

创建分支
git branch branch_name

切换分支
git checkout branch_name

创建分支并切换分支
git checkout -b branch_name

删除分支
git branch -d branch_name

在分支上提交新的版本
git commit -a -m ‘备注信息’

合并到当前分支
git merge branch_name

分支的合并后显示log
git log –oneline –graph –decorate

分支数据推送更新

origin为默认的远程仓库名,可以使用:git remote add xxx “remote_repository_URL”来添加远程仓库,所以下面命令中的origin不唯一;
master为主分支名称;

获取远端上指定分支
git fetch origin remote_branch_name

合并远端上指定分支
git merge origin remote_branch_name

推送到远端上指定分支
git push origin remote_branch_name

推送到远端上指定分支
git push origin local_branch_name:remote_branch_name

基于远端dev新建test分支
git checkout -b test origin/dev

删除远端分支[推送空分支,目前等同于删除]
git push origin :remote_branch_name

添加远程仓库
git push origin master

连接远程仓库
git remote add xxx ‘remote_repository_URL’

查看远程仓库
git remote -v

删除远程仓库
git remote rm

远程仓库相关命令

检出仓库:git clone git://github.com/jquery/jquery.git

查看远程仓库:git remote -v

添加远程仓库:git remote add
remoteRespositoryName为远程仓库标识,名称任意;

删除远程仓库:git remote rm

修改远程仓库:git remote set-url –push

拉取远程仓库:git pull remoteName] [localBranchName]

推送远程仓库:git push

如:
git push
*如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,如下:

git push origin test:master //提交本地test分支作为远程的master分支

git push origin test:test //提交本地test分支作为远程的test分支

分支(branch)操作相关命令

查看本地分支:git branch

查看远程分支:git branch -r

创建本地分支:git branch [name] —-注意新分支创建后不会自动切换为当前分支

切换分支:git checkout [name]

创建新分支并立即切换到新分支:git checkout -b [name]

删除分支:git branch -d [name] —- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项

合并分支:git merge [name] —-将名称为[name]的分支与当前分支合并

创建远程分支(本地分支push到远程):git push origin [name]

删除远程分支:git push origin :heads/[name]或gitpush origin :[name]

创建空的分支:(执行命令之前记得先提交你当前分支的修改,否则会被强制删干净没得后悔)
git symbolic-ref HEAD refs/heads/[name]
rm .git/index
git clean -fdx

版本(tag)操作相关命令

查看版本:git tag

创建版本:git tag [name]

删除版本:git tag -d [name]

查看远程版本:git tag -r

创建远程版本(本地版本push到远程):git push origin [name]

删除远程版本:git push origin :refs/tags/[name]

合并远程仓库的tag到本地:git pull origin –tags

上传本地tag到远程仓库:git push origin –tags

创建带注释的tag:git tag -a [name] -m ‘yourMessage‘

子模块(submodule)相关操作命令

添加子模块:git submodule add [url] [path]
如:git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs

初始化子模块:$ git submodule init —-只在首次检出仓库时运行一次就行

更新子模块:$ git submodule update —-每次更新或切换分支后都需要运行一下

删除子模块:(分4步走)

1)git rm –cached [path]
2)编辑“.gitmodules”文件,将子模块的相关配置节点删除掉
3)编辑“.git/config”文件,将子模块的相关配置节点删除掉
4)手动删除子模块残留的目录

忽略一些文件、文件夹不提交

在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如
target
bin
*.db

Git 常用命令

git branch 查看本地所有分支
git status 查看当前状态
git commit 提交
git branch -a 查看所有的分支
git branch -r 查看本地所有分支
git commit -am “init” 提交并且加注释
git remote add origin git@xxx.xxx.xxx 添加远程仓库
git push origin master 将文件给推到服务器上
git remote show origin 显示远程库origin里的资源
git push origin master:develop
git push origin master:hb-dev 将本地库与服务器上的库进行关
git checkout –track origin/dev 切换到远程dev分支
git branch -D master develop 删除本地库develop
git checkout -b dev 建立一个新的本地分支dev
git merge origin/dev 将分支dev与当前分支进行合并
git checkout dev 切换到本地dev分支
git remote show 查看远程库
git add . 添加当前目录的所有文件到暂存区
git rm 文件名(包括路径) 从git中删除指定文件
git clone xxxxxxx.git 从服务器上将代码给拉下来
git config –list 看所有用户
git ls-files 看已经被提交的
git rm [file name] 删除一个文件
git commit -a 提交当前repos的所有的改变
git add [file name] 添加一个文件到git index
git commit -v 当你用-v参数的时候可以看commit的差异
git commit -m “This is the message describing the commit” 添加commit信息
git commit -a -a是代表add,把所有的change加到git index里然后再commit
git commit -a -v 一般提交命令
git log 看你commit的日志
git diff 查看尚未暂存的更新
git rm a.a 移除文件(从暂存区和工作区中删除)
git rm –cached a.a 移除文件(只从暂存区中删除)
git commit -m “remove” 移除文件(从Git中删除)
git rm -f a.a 强行移除修改后文件(从暂存区和工作区中删除)
git diff –cached 或 $ git diff –staged 查看尚未提交的更新
git stash push 将文件给push到一个临时空间中
git stash pop 将文件从临时空间pop下来
git remote add origin xxxxxx.git
git push origin master 将本地项目给提交到服务器中
git pull 本地与服务器端同步
git push (远程仓库名) (分支名) 将本地分支推送到服务器上去。
git push origin serverfix:awesomebranch
git fetch 相当于是从远程获取最新版本到本地,不会自动merge
git commit -a -m “log_message” (-a是提交所有改动,-m是加入log信息) 本地修改同步至服务器端
git branch branch_0.1 master 从主分支master创建branch_0.1分支
git branch -m branch_0.1 branch_1.0 将branch_0.1重命名为branch_1.0
git checkout branch_1.0/master 切换到branch_1.0/master分支

git指令速查表:
https://www.git-tower.com/blog/git-cheat-sheet-cn
git命令速记图片:
这里写图片描述

upload||update本地目录或文件到github

  1. cd destination_file_path //进入目标目录或文件
  2. git init //创建git本地仓库或重置已存在的仓库
    这里写图片描述

  3. 添加文件||目录到暂存区
    目录:

    • git add . //将当前所在目录中的所有文件添加到暂存区中

    文件:

    • git add file_name //将特定文件添加到暂存区中
      这里写图片描述
  4. git commit -m “此处为注释信息” //将暂存区的文件commit到本地仓库,并添加注释
    这里写图片描述

  5. 创建新的远程仓库
    (登录github->new Respository,拷贝生成的https clone URL或ssh clone URL)

    git remote add origin https_clone_URL||ssh_clone_URL //将本地仓库关联到github上的远程仓库(备注:如果显示origin已存在,则先删除远程仓库origin即:”git remote rm origin”再关联)
    这里写图片描述

  6. git pull origin master

    在push之前,需先pull,pull=fetch+merge;
    pull产生的merge信息:
    这里写图片描述
    (ctrl+”x”)

    pull下来的文件和本地文件冲突的解决办法:
    http://www.01happy.com/git-resolve-conflicts/
    这里写图片描述

    这里写图片描述

  7. git push -u origin master(上传代码到远程仓库的主分支上)
    这里写图片描述

查看提交结果:

这里写图片描述

补充:
git init和git init –bare的区别:
http://blog.csdn.net/ljchlx/article/details/21805231
https://segmentfault.com/q/1010000004683286

git pull 和git push用法

  • git pull <远程主机名> <远程分支名>:<本地分支名>

详解:
该命令的用法一句话总结是–将”哪台主机”的”哪个分支”拉取到本地仓库的”哪个分支”,因此需要描述清楚四个元素中的三个元素。
分支推送顺序的写法是:,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。

其中远程主机名有两种写法:

一种是直接写完整的远程主机地址
git push ssh://git@dev.lemote.com/rt4ls.git master:master

一种是给远程主机一个简短的映射名然后使用映射名
git remote add origin ssh://git@dev.lemote.com/rt4ls.git
git push origin master:master

  1. 取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。
    git pull origin next:master

  2. 如果省略本地分支名,则表示远程分支是与当前分支合并。
    git pull origin next
    上面命令表示,取回origin/next分支,再与当前分支合并。

  3. 如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。
    git pull origin
    上面命令表示,本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并。

  4. 如果当前分支只有一个追踪分支,连远程主机名都可以省略。
    git pull
    上面命令表示,当前分支自动与唯一一个追踪分支进行合并。

扩展
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。
Git也允许手动建立追踪关系。

git branch –set-upstream master origin/next
上面命令指定master分支追踪origin/next分支。

克隆远程仓库到本地库

一般的git托管社区都提供两种,一种是基于https,一种是基于ssh,
前者需要账号密码提交,后者可以配置SSH-KEYGEN;

(https)
git clone https://github.com/TradingProGlobal/fengine.git

(ssh)
git clone git@github.com:TradingProGlobal/fengine.git

用法:git clone [<选项>] [–] <仓库> [<路径>]

-v, --verbose         更加详细-q, --quiet           更加安静--progress            强制显示进度报告-n, --no-checkout     不创建一个检出--bare                创建一个纯仓库--mirror              创建一个镜像仓库(也是纯仓库)-l, --local           从本地仓库克隆--no-hardlinks        不使用本地硬链接,始终复制-s, --shared          设置为共享仓库--recursive           在克隆时初始化子模组--recurse-submodules  在克隆时初始化子模组--template <模板目录>                      模板目录将被使用--reference <仓库>    参考仓库--dissociate          仅在克隆时参考 --reference 指向的本地仓库-o, --origin <名称>   使用 <名称> 而不是 'origin' 去跟踪上游-b, --branch <分支>   检出 <分支> 而不是远程 HEAD-u, --upload-pack <路径>                      远程 git-upload-pack 路径--depth <深度>        创建一个指定深度的浅克隆--single-branch       只克隆一个分支、HEAD 或 --branch--separate-git-dir <git目录>                      git目录和工作区分离-c, --config <key=value>                      在新仓库中设置配置信息

github设置SSH秘钥

  1. ubuntu生成公钥和私钥
    ssh-keygen -t rsa -C 15369967109@163.com
    (-C选项为备注信息)

  2. 将生成的公钥文件(位于/root/.ssh)中的内容复制到github的SSH Key-→new Key中;

  3. 测试连接github
    ssh -T git@github.com

    报错:
    sign_and_send_pubkey: signing failed: agent refused operation
    Permission denied (publickey).

    解决方法:
    http://blog.chinaunix.net/uid-21142030-id-5723937.html

本地库和远程库实现同步(二者均存在的前提下)

本地库的改动提交到远程库:git push origin master
更新本地库至远程库的最新改动:git pull

pycharm提交代码到github

  1. 设置git
    File–→Settings–→Version Control–→Git:
    指定本地git可执行文件路径,如图:
    这里写图片描述

    点击Test,测试连接,如图:
    这里写图片描述

  2. 设置github
    File–→Settings–→Version Control–→Github:

    方式一(Auth Type=Password):
    指定github登录账号(邮箱)和密码:
    这里写图片描述
    点击Test,测试连接,如图:
    这里写图片描述
    方式二(Auth Type=API T oken):
    设置github的登录账号和密码,来生成API Token,如图:
    这里写图片描述
    点击Test,测试连接,如图:
    这里写图片描述

  3. 指定提交代码的目标远程库地址(即github repository url)
    此步骤对应:git remote add xxx “remote_repository_URL”
    VCS—>Git—>Remotes:
    这里写图片描述
    点击”+”,添加:
    这里写图片描述

    Name:标识,任意;
    URL:github repository URL,如:git@github.com:xxx/xxx.git(ssh_URL

    https://github.com/xxx/xxx.git(https_URL)

  4. 提交代码文件或目录
    选中文件或目录
    left click–→Git–→Add(对应于git add .或git add file_path,即将文件或目录中的所有文件添加到暂存区)
    left click–→Git–→Commit Files(对应git commit -C ‘xxx’,即:将暂存区的所有文件提交到本地版本库中)
    如图:
    这里写图片描述
    选择”Commit and Push”,
    接下来,指定目标远程主机名和远程分支(对应git push <远程主机名> <远程分支>:<本地分支>),如图:
    这里写图片描述

    格式为:本地分支名->远程主机名:远程分支名
    (说明:
    远程主机名即我们第三步设置的远程库地址时起的标识(name),用鼠标单击此项可以以下拉框的形式选择我们已经设置好的远程库地址列表;
    下面的白色字体为提交记录,以提交时的注释进行标识,右侧的显示框为提交的具体内容;)
    点击Push,完成代码提交;

  5. 登录github查看是否已提交上;
    选择对应的远程库:origin,即:https://github.com/yanniData/test2.git,即yanniData/test2
    选择对应的分支:zhangjian
    如图:
    这里写图片描述

    demo1.py文件已被提交进来;

原创粉丝点击