git学习

阅读数:142 评论数:0

跳转到新版页面

分类

git

正文

1、设置

(1)全局设置

#设置一些全局量的值
git config --global 

git config --global user.name "cuihs"
git config --global user.email "cuisxxx@163.com"
#然后执行
git config --global credential.helper store
#之后就不用每次都输入用户名和密码了

# 查看全部设置
git config --global --list

2、使用

(1)基本使用

#创建版本库
git init
#添加文件
git add .或指定文件
#提交
git commit -m 'first commit'

#新文件的提交到修改后的提交是一样的,都是先git add ,然后git commit

#上传
git push -u origin master

#查看变更内容
git diff
# 比较两个分支,显示出所有差异的文件列表
git diff branch1 branch2 --stat 
# 比较两个分支,显示指定文件的详细差异
git diff branch1 branch2 文件名(带路径)
# 比较两个分支,显示出所有有差异的文件的详细差异
git diff branch1 branch2
#跟踪所有改动过的文件
git add .
#跟踪指定的文件
git add file
#文件改名
git mv old new
#删除文件
git rm file
# 停止跟踪文件但不删除
git rm --cached file

 

(2)分支

有两种分支比较有用:(1)支持项目的不同发布版本的分支(2)支持一个特定功能的开发的分支

# 新分支名和父分支名称
git branch RB_1.0 master

# 查看所有分支
git branch -a
#查看当前使用分支
git branch
#切换分支
git checkout 分支名
# 把命名为branchName的本地分支推送到服务器
git push origin branchName
#提示代码到远程服务器上命名为branchName的分支
git push origin branchName
# 从远程分支上拉取代码
git pull origin branchName

#创建并切换分支
git checkout -b 分支名

#合并分支
先切换到master  : git checkout master

git merge fenzhi (最后别忘了git push origin master)

#删除本地分支
git branch -d 分支名
#删除远程分支
git push origin --delete branch_name
#要想本地和远程都删除,必须要运行两个命令


#恢复分支
git branch 分支名 提交号

#查看分支图
git log --graph --pertty=oneline --abbrev-commit

#分支重命名
git branch -m 当前分支名  新分支名

#当我们发现本地分支信息没有更新时,可以通过下面的命令来更新一下分支信息
git remote update origin --prune

 

(3)clone

# 远程版本库的位置  本地目录(可选)
git clone git://github.com/xxx/xx.git mydir

(4).gitignore

把要忽略的文件名加到.gitignore文件中,而且Git支持统配符,可以用通配符设置要忽略的文件名称。

(5)git status

    git status可以查看哪些文件是新添加的,哪些文件已加入暂存区域的。

(6)再次批量提交

git add .
git commit -m 'commit message'
git push

(7)修改remote地址

// 查看远程仓库地址
git remote -v

// 方式一,直接修改
git remote set-url origin xxx.git

//方式二,先删后加
git remote rm origin
git remote add origin xxx.git

3、网络协议

(1)ssh

git@github.com/yourreposi/project.git

(2)git

git://github.com/yourrepo/project.git

(3)http/https

http://github.com/yourrepo/project.git

4、cherry-pick

对于多分支的代码库,将代码从一个分支转移到另一个分支是常见的需求。

一种情况是,你需要另一个分支的所有代码变动,那么就采用git merge;另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用cherry pick。

(1)基本用法

git cherry-pick <commitHash>

上面命令变会将指定的提交commitHash应用于当前分支。

 a - b - c - d   Master
         \
           e - f - g Feature

现在将提交f应用于master分支

# 切换到 master 分支
$ git checkout master

# Cherry pick 操作
$ git cherry-pick f
    a - b - c - d - f   Master
         \
           e - f - g Feature

git cherry-pick命令的参数,不一定是提交的hash值,分支名也是可以的,表示转移该分支的最新提交。

git cherry-pick feature

上面代码表示将feature分支的最近一次提交,转移到当前分支。

(2)转移多个提交

git cherry-pick <hashA><hashB>

如果想要转移一系列的连续提交,可以使用下面的简便语法

git cherry-pick A..B

上面的命令可以转移(A,B]的所有提交

git cherry-pick A^..B

上面的命令可以转移[A,B]的所有提交。

(3)配置项

-e, --edit

打开外部编辑器,编辑提交信息。

-n,--no-commit

只更新工作区和暂存区,不产生新的提交。

-x

在提交信息的末尾追加一行(cherry picked from commit....),方便以后查到这个提交是如何产生的。

-s,--signoff

在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作。

-m parent-number,--mailine parent-number

如果原始提交是一个合并节点,来自于两个分支的合并,那么cherry-pick默认将失败,因为它不知道应该采用哪个分支的代码变动

(4)代码冲突

--continue

用户解决冲突后,第一步将修改后的文件重新加入暂存区(git add .),第二步使用git cherry-pick --continue

--abort

发生代码冲突后,放弃合并,回到操作前的样子。

--quit

发生代码冲突后,退出cherry pick,但不回到操作前的样子。

 

5、Tag以及Branch的区别

每次正式版本上线后,用于上线的那一时刻,commit的代码拉出来作为tag。开发人员可继续在当前开发分支上开发,准备下一个sprint的上线。

如果突然有紧急上线,可以在最新版本的tag的基础上新建一个分支:

git branch <branch name> <tag name>

然后checkout一下,在这个分支上进行紧急上线的开发。开发完成,上线后将新的代码merge到开发分支上,继续开发。

(1)查看标签,可以加上参数 -l(列表形式列出) -n(附加说明)

git tag [-l -n]

(2)查看符合检索条件的标签

git tag -l 1..

(3)查看对应标签状态

git checkout 1.0.0

(4)创建带备注标签(推荐)

git tag -a 1.0.0 -m "这是备注信息"

(5)删除标签(本地)

git tag -d 1.0.0

(6)将本地所有标签发布到远程仓库

git push origin --tags

(7)指定版本发送

git push origin 1.0.0

6、.gitignore不生效

只需要清空一下git本地的缓存提交一次即可。

git rm -r --cached .
git add .
git commit -m "fixed untracked files"
git push -u origin master

7、查看提交历史

#查看提交历史
git log
# 查看指定文件的提交历史
git log -p file
# 以列表方式查看指定文件的提交历史
git blame file

8、撤消

#撤消所有未提交文件的修改内容
git reset --hard HEAD
#撤消指定的未提交文件的修改内容
git checkout HEAD file
#撤消指定的提交
git revert commit