github的使用---git版本控制

git 安装

ubuntu下: sudo apt-get install git 源码安装

  

windows下载git软件即可

git核心原理

git常用命令

 

git add
添加提交任务到暂存区
git commit -m "commit info"
添加提交任务到版本库
git log
查看提交记录
git diff
查看工作区和暂存区的差异
git diff --cached
查看暂存区和版本库的差异
git diff HEAD
查看工作区和版本库的差异
git status -s
简短输出,第一个M表示暂存区和版本库内容不一致;第二个M表示工作区和暂存区内容不一致
git checkout -- file.txt
把暂存区的file.txt文件恢复到工作区,覆盖工作区之前的修改。checkout命令主要是把历史某个版本检出到工作
区。慎用
git reset HEAD
暂存区的目录树被版本库里的内容重置,但是工作区不受影响。放弃之前git add的提交。
git reset --hard SHA1号/HEAD
工作区和暂存区的目录树被版本库里的内容重置。放弃之前git add和个git commit的提交。
git rm file.txt
删除文件
git blame file.txt
查看文件提交历史信息,方便定位bug
git show-ref
查看所包含的引用
git merge
进行合并操作
git push -u origin master
向远程版本库origin的master分支提交
git pull
把远程版本库的master分支拉到本地,数据同步服务器端
git tag -m "my first tag" mytagv1.0
制作里程碑
git cat-file tag mytagv1.0
查看mytagv1.0提交信息
git tag -l -n1
查看所有tag,n1显示一行信息
git tag -d mytagv1.0
删除tag
git branch newbranch
创建分支
git checkout newbranch
切换到newbranch分支
git branch -d newbranch
删除分支,如没合并,则失败
git branch -D newbranch
强制删除分支
git push origin :newbranch
先删除本地分支,再删除远程版本库对应分支
git show-ref
查看本地引用
git checkout -b hello-1 origin/hello-1
创建跟踪远程分支的本地分支,随后可以pull和push远程分支
git remote add new-remote file:///path/hello-1.git
创建远程版本库
git remote -v
查看远程版本库

 

 

 github协作开发GitHub(网址 https://github.com/)是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub

github地址:

https://github.com/

 创建帐号

 

创建项目
  1.创建项目
  2.下载项目

1. 网页下载zip文件
2. git clone https://github.com/xwpfullstack/itcast.git

  linux终端配置

1 配置环境
设置系统全局用户

Global setup:
git config --global user.name "Your Name"
git config --global user.email xwp_fullstack@163.com

每个项目也可以单独在配置文件里设置用户

vim .git/config

  查看环境配置

git config -l

  删除全局配置

git config --unset --global user.name
git config --unset --global user.email

  

ssh配置
1.生成ssh-key,在终端下执行以下命令

itcast$ ssh-keygen
~/.ssh/id_rsa是私钥文件
~/.ssh/id_rsa.pub是公钥文件

 

2.把公钥上传到github上

 


配置好ssh公钥后,在终端下执行以下命令

 

ssh -T git@github.com Hi gotgithub! You've successfully authenticated, but GitHub does not provide shell access. 出
现上述提示证明配置好ssh

 

.ssh-key的作用
用户命令行下提交代码时不需要再输入账号和密码,默认https协议是需要输入的
修改项目中./git/config文件,把url换成 url = git@github.com:注册名/项目名.git
例如: url = git@github.com:xwpfullstack/test.git

 

第一个项目

1 新建空项目
先在github页面创建一个项目world

git clone https://github.com/xwpfullstack/world.git
cd world
echo "world"" >> README.md
git add README.md

 git commit -m "first commit"
 git remote add origin https://github.com/xwpfullstack/world.git
 git push -u origin maste

把一个已经存在的git管理的项目放到github上托管

git remote add origin https://github.com/xwpfullstack/world.git
git push -u origin master

  

下载项目
三种下载方式:

https协议下载
git clone https://github.com/username/test.git
Git-daemon协议下载
git clone git://github.com/username/test.git
打包下载

 

 分支

 

git branch -a
查看所有分支,含远程
git branch
查看本地分支
git branch -r
查看远程分支
git branch newbranch
创建新分支
git branch -d oldbranch
删除分支oldbranch
git push origin newbranch
把新分支同步到远程仓库
git push origin :oldbranch
删除远程oldbranch分支
git checkout -b newbranch
切换到另一分支,如果不存在则创建
git checkout branch
切换到另一分支
git clone新项目时
无论当前项目在什么分支,都是下载默认master分支
git checkout master
git merge anthorbranch
git push origin maste
合并开发分支到master分支
git pull尽量少使用,隐含了合并信息
get featch 下载远程origin/master更新
git diff master origin/master
查看本地和远程库的区别
get merge origin/master
合并远端更新到本地

  

tag
tag

git tag v1.0 -m "tag v1"
创建一个标签
git push origin --tags
把所有标签同步到远程库
git checkout v1.0
检出v1.0版本
git reset --hard v1.0
使代码重置,回到v1.0。此功能慎用,后开发的代码会丢失
git tag -d v1.0
删除标签v1.0
git push origin :v1.0
删除远程库里标签
git tag -l -n1
查看所有tag

  


 HEAD
HEAD

指向当前提交点,游标指针
HEAD^ 上次提交点,父提交点
git checkout HEAD^
切换到上次提交点,不在分支
git reset --hard HEAD^
撤销本次提交,恢复到上次提交状态,新创建的文件会丢弃
4.5.7 忽略监控文件
.gitignore一般把.o和临时文件设置进去,忽略代码监控,如某项目.gitignore:
#过滤数据库文件、sln解决方案文件、配置文件
*.mdb
*.ldb

*.sln
*.config

#过滤文件夹Debug,Release,obj
Debug/
Release/
obj/

 

然后调用git add. ,执行 git commit即可。
问题:.gitignore只适用于尚未添加到git库的文件。如果已经添加了,则需用git rm
移除后再重新commit。

例子:

保存修改的方式,比如切分支,把当前改动应用到另外的反正等:

git stash 保留修改到缓冲区,可以多次在不同的分支

git stash pop 弹出修改,缓冲区清理到这一条缓存

git stash list 查看有多少修改缓存

git stash  apply id 可以把其应用到其他分支,不删除,可以重复使用

1)回撤提交(gerrit)
git reset --hard HEAD^(回撤上一次提交或者 git reset --hard id)
git checkout . (删除本地信息)
git pull --rebase (拉取)
重新修改提交

11)回撤提交(gitlab)

如果想保存本地的提交git stash 

本地回撤(已经commit),不保留修改

  git reset --hard HEAD^(回撤上一次提交或者 git reset --hard id)

本地回撤(已经commit),保留修改,回撤后,改动还在

 git reset --soft id

同步到远端 

    git push -f origin 分支

2)cherry-pick 到新的分支
切换分支并创建本地名
git checkout -b 本地名(随便起) 远程分支名
如果已经存在直接 git checkout 本地名
查看本地分支名 git branch
查看远程分支名 git branch -r
git log --oneline 查看提交号
然后切换分支

git log --oneline
# 查看最近三次提交
$ git log --oneline -3
23d9422 [Description]:branch2 commit 3
2555c6e [Description]:branch2 commit 2
b82ba0f [Description]:branch2 commit 1
git branch -r |grep "1.2.2"
git checkout -b F1_v1.2.2 shaitgrt01/A_SERES_F1/release/v1.2.2
如果失败,出现Cannot update paths and switch to branch xxx at the same time解决方法
这个问题产生的原因在切换分支的时候,本地git信息中没有你要拉取的分支信息,一般产生错误是使用如下命令造成的
解决方法:
执行git fetch命令
git fetch
git checkout -b 分支名字 origin/分支名
成功后:想要合并分支1的提交到2到分支F1_v1.2.2
git cherry-pick 2555c6e
然后
git commit
最后提交
git push shaitgrt01 HEAD:refs/for/A_SERES_F1/release/v1.2.2

 详情:

http://blog.cfdns.com.cn/shows-50-409.html

https://blog.csdn.net/u011645307/article/details/119486927

3)合并多个commit为一个,并同步到远程分支 

首先假设我们有3个 commit

  

 

比如我们需要合并add thirdcommit和add second commit 

我们需要将 2dfbc7e8 和 c4e858b5 合并成一个 commit,那么我们输入如下命令

 git rebase -i f1f92b

其中,-i 的参数是不需要合并的 commit 的 hash 值(add first commit),这里指的是第一条 commit, 接着我们就进入到 vi 的编辑模式

 

 

 然后,

可以看到其中分为两个部分,上方未注释的部分是填写要执行的指令,而下方注释的部分则是指令的提示说明。指令部分中由前方的命令名称、commit hash 和 commit message 组成。

当前我们只要知道 picksquash 这两个命令即可。

  • pick 的意思是要会执行这个 commit
  • squash 的意思是这个 commit 会被合并到前一个commit

我们将 c4e858b5 这个 commit 前方的命令改成 squashs,然后输入:wq以保存并退出

 

这是我们会看到 commit message 的编辑界面

 

其中, 非注释部分就是两次的 commit message, 你要做的就是将这两个修改成新的 commit message。

输入wq保存并推出, 再次输入git log查看 commit 历史信息,你会发现这两个 commit 已经合并了。

 

注意事项:如果这个过程中有操作错误,可以使用 git rebase --abort来撤销修改,回到没有开始操作合并之前的状态。

然后,同步到远端

注意,这个时候本地合并完成以后,远端的提交记录里面还没有变,这个时候 git push 的话会提示远端有更新,需要git pull,
但是!!!不要pull!!
这个时候需要用本地去覆盖掉远端的提交,执行 git push -f
注意看!这是强推之前的提交记录, 3 次!!
git push -f origin 分支。

4)删除远程分支

git push origin --delete 远程分支名

再删除本地分支名:

git branch -d branch_name // 如果删除不了,执行强制删除命令: git branch -D branch_name

 

 

 

 
posted @ 2018-10-16 15:12  白伟碧一些小心得  阅读(1554)  评论(0编辑  收藏  举报