git学习笔记

143次阅读

共计 8100 个字符,预计需要花费 21 分钟才能阅读完成。

学习廖雪峰老师博客,一些关于 git 的笔记。如有记录错误,望能不吝赐教。

1.git 诞生
git 是 linus 为了 linux 进行版本控制而自己用 c 写的分布式版本控制系统,在 21 世纪初,有 cvs、svn 这些免费的版本控制系统,这些集中式版本控制系统不仅速度慢,而且需要联网才能使用;还有一些商用的版本控制系统,比如 linus 后来选择的 BitKeeper。

2. 集中式 vs 分布式
集中式:

  • 版本库是存放在中央服务器的,干活前,要先从中央服务器取得最新的版本,结束后,还要把自己的活推送给中央服务器。
  • 集中式版本控制系统还需要联网才可以进行作业,所以网速慢的话,工作前后等待的时间就极其耗时。

分布式:

  • 分布式根本没有”中央服务器“的概念,每台电脑都是一个完整的版本库,这样工作就不需要联网了,版本库在自己的电脑上。工作的时候,只需要把各自的文件互相推送给对方就行了。
  • 与集中式相比,分布式更加安全。即使有一个人电脑坏掉了也没关系,因为每个人的电脑都有完整的版本库,可以从别人电脑里复制。但如果集中式版本控制系统的中央服务器坏掉了,那大家什么都不能做
  • 分布式通常也将一台电脑充当”中央服务器“来进行方便电脑与电脑直接的信息推送,但是即使这台充当”中央服务器“的电脑坏了也没关系,因为每个人的电脑都有完整的版本库,只是信息互相推送比较麻烦,需要在同一局域网,两台电脑间才能互相访问。

3. 安装 git

  • 在 linux 上安装 git

$ git
The program ‘git’ is currently not installed. You can install it by typing:
sudo apt-get install git
输入 git 看有没有安装
sudo apt-get install git 如果没有,据说通过它就可以直接安装

  • 在 Mac OS X 上安装 git

一个通过 homebrew(http://brew.sh/)
一个是通过 Xcode:选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了

  • 在 Windows 上安装 git

在 git 官网直接下载安装程序,国内镜像(https://github.com/waylau/git…)
开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明 Git 安装成功!
安装完成后,还需要最后一步设置,在命令行输入:
$ git config –global user.name “Your Name”
$ git config –global user.email “email@example.com”

4. 创建版本库

  • 版本库又名仓库,英文:repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被 git 管理起来,每个文件的修改、删除,git 都能跟踪。
  • 所有的版本控制系统都只能跟踪文本文件的改动,比如 TXT 文件、网页、程序代码等等,而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但不能跟踪文件的变化。
  • 创建一个版本库 git init

先创建一个空目录,mkdir <fileName>
再通过 git init 命令把这个目录变成 git 可以管理的仓库。其中有一个.git 的目录是 git 用来跟踪管理版本库的(这是一个隐藏目录,用 ls -ah 命令可以看见)。

  • 把文件添加到版本库

第一步,用命令 git add 告诉 git,把文件添加到仓库
第二步,用命令 git commit 告诉 git,把文件提交到仓库
(git commit 命令执行成功后会告诉你,1 file changed:1 个文件被改动(我们新添加的 readme.txt 文件);2 insertions:插入了两行内容(readme.txt 有两行内容))
添加文件到 Git 仓库,分两步:

  • 使用命令 git add <file>,注意,可反复多次使用,添加多个文件;
  • 使用命令 git commit -m <message>,完成

5. 版本回退

  • 在 git 中,用 HEAD 表示当前版本,用 HEAD^ 表示上一个版本,用 HEAD^^ 表示上上版本,HEAD~100 表示往前 100 个版本
  • git log 显示从最近到最远提交 (commit) 的历史记录,也可以通过 git log —pretty=oneline 来简化信息
  • git reflog 显示命令历史,可以得知每一个提交的版本跟回退版本操作的版本号信息
  • git reset –hard 回退版本

git reset –hard HEAD^ 回退到上一个版本
git reset –hard <commit id> HEAD 指针指向指定版本号的版本(这一点可以让我们坐时光机去向过去,也可以从过去回到现在)
(查看文档内容,cat <fileName>)

6. 工作去和暂存区

  • 工作区(working directory)

在电脑目录中可以看到的目录都是工作区

  • 版本库(repository)

在工作区有一个隐藏目录.git,它是 git 的版本库,里面有暂存区 (stage 或者 index);还有 git 为我们自动创建的第一个分支 master,包括指向 master 的一个指针:HEAD
把文件往 git 版本库里添加的时候,分两步执行:

  • 第一步,git add 把文件添加进去,即把文件 ongoing 工作台添加到暂存区
  • 第二步,git commit 提交更改,即把暂存区所有内容提交到当前分支

7. 管理修改

  • git 可以追踪并管理修改,因为有暂存区这个概念,将修改加入到暂存区,再次对文档进行修改,这时候把暂存区内容 commit 到分支上,那么前一次修改被提交了,而工作区里的修改(第二次修改)还在你的工作区中。
  • 提交修改后(commit),可以用 git diff HEAD — <fileName> 来查看版本工作区和版本库里最新版本的区别。

8. 撤销修改

  • git checkout — file 让工作区文件回到最近一次 git commit 或者 git add 的状态

场景 1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时。
撤销修改会出现以下两种状况:
一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

  • git reset HEAD <fileName> 将暂存区的内容撤销掉

场景 2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步:

  • 第一步,用命令 git reset HEAD <fileName>,撤销暂存区 fileName
  • 第二步,通过 git checkout — <fileName>, 拉最新版本
  • git reset –hard HEAD^

场景 3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退,不过前提是没有推送到远程库。

9. 删除文件 rm <fileName>

  • git rm

当我们在工作区删除了文件,造成工作区和版本库的版本不一致,我们可以通过 git rm <fileName> 删掉版本库的文件,并且 git commit -m“xxx”。也可以通过 git add <fileName> 然后 git commit -m“xxx”效果是一样的。

10. 添加远程仓库

  • 在 GitHub 上建一个 Git 仓库

登录 GitHub —> create a repository —> 填写仓库信息 —> Git 仓库创建成功

  • 与本地关联

1. 我们可以 git clone 从仓库克隆一个新的仓库
2. 也可以把本地已有的仓库与之关联,然后把本地仓库的内容推送到 GitHub 仓库
git remote add origin git@github.com:xxjiayy/learngit_xjy.git
本地已有仓库与远程关联,origin 就是远程仓库的名字
git push -u origin master
把本地库的内容推送到远程。由于远程库是空的,我们第一次推送到 master 分支时,加一个 - u 参数,GIt 不但会把本地的 master 分支内容推送到远程新的 master 分支,还会把 master 分支和远程的 master 关联起来。

  • 在 GitHub 中新建公钥

1. 看一下 ~/.ssh 文件中是否已存在 id_rsa.pub 和 id_rsa 文件
如果存在就不需要创建一个 SSH key,当然也可以 overwrite 重新生成,如果要重写的话,之前关联过公钥的版本库都要重新关联。
2. 创建 SSH key

  • 如果不存在 id_rsa.pub 和 id_rsa 文件,需要创建 SSH key

ssh-keygen -t rsa -C “xxjiayy”
-t:指定密钥类型,默认是 rsa,可以省略
-C:设置备注文字,例如:用户名
然后会出现:让你输入文件名,可以回车选择默认文件名
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xiejiayun/.ssh/id_rsa):
然后,会提示输入密码:可以选择不输入
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
最后看到:说明你已经创建成功了
Your identification has been saved in /Users/xiejiayun/.ssh/id_rsa.
Your public key has been saved in /Users/xiejiayun/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:VnCyghzZ5jomXIKKFlqqnPyXFWHPjLqmob+Dj0PGRJQ xxjiayy

  • 如果存在 id_rsa.pub 和 id_rsa 文件,你也可以选择重写
    ssh-keygen -t rsa -C “xxjiayy”

然后会出现:让你输入文件名,可以回车选择默认文件名
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xiejiayun/.ssh/id_rsa):
如果默认文件名的话,它就跟你之前已存在的文件冲突了,所以它出现:
Overwrite (y/n)? y
选择 yes,开始重写之旅…. 然后下面的部分跟创建相同
3. 添加 SSH key 到 GitHub 上去

  • 将 id_rsa.pub 文件中的内容复制
  • 登录 GitHub —> 右上角 settings 进入 —> 点击 SSH and GPD keys —> New SSH key —> 在 Key 里面把刚刚的文件内容复制进去,title 随意填写(保存后系统也会默认生成)—> Add SHH key (这时候发现钥匙的图标还是灰色的)

4. 本地测试 SSH key
ssh -T git@github.com
如果创建 SSH key 的时候设置了密码,就会让你输入:(之后每次 push 都会让你输密码)
Enter passphrase for key ‘/Users/xiejiayun/.ssh/id_rsa’:
最后,恭喜已经成功了,钥匙图标也变成绿色了
Hi xxjiayy! You’ve successfully authenticated, but GitHub does not provide shell access.
如果看到“access denied”,表示拒绝访问,那么只能使用 https 去访问,而不是 SSH

11. 从远程克隆

  • 创建一个新的仓库

勾选下面的选项,给这个新仓库添加 README 格式化
Initialize this repository with a README

  • 克隆一个本地仓库

git clone git@github.com:xxjiayy/gitskillls.git

  • SSH 和 https 克隆的区别

git 还支持 https 协议,但比起 SSH,使用 https 除了速度慢以外,还有最大的麻烦是每次推送都必须输入口令。

12. 创建与合并分支
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建 + 切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>

  • 在合并分支的时候,会出现 Fast-forward 信息,表示这次合并是“快进模式”,也就是直接把当前分支指向某分支

13. 解决冲突
当 Git 无法自动合并分支时,就必须首先解决冲突。git status 可以告诉我们冲突文件,解决冲突后,再提交,合并完成。
解决冲突就是把 Git 合并失败的文件手动编辑为我们希望的内容,再提交。
用 git log –graph 命令可以看到分支合并图。

14. 分支管理策略
合并分支时,加上 –no-ff 参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而 fast forward 合并就看不出来曾经做过合并。
git merge –no-ff -m “merge with no-ff” dev
因为本次合并要创建一个新的 commit,所以加上 - m 参数,把 commit 描述写进去。

15.Bug 分支

  • git stash

现在的工作区工作并没有完成,无法 commit,但现在需要切换分支,进行别的工作,可以把当前的工作现场“储藏”起来

  • git stash list

查看储藏起来的工作区内容,可以多次 stash

  • git stash apply 恢复 stash 内容,git stash drop 删除 stash 的内容
  • git stash pop 恢复的同时把 stash 内容也删了
  • git stash apply stash@{0} 可以恢复指定的 stash 内容
  • git cherry-pick <commit>

cherry-pick 命令,复制某一个特定的提交到当前分支
在 master 分支上修复的 bug,想要合并到当前 dev 分支,可以用 git cherry-pick <commit> 命令,把 bug 提交的修改“复制”到当前分支,避免重复劳动

16.feature 分支
开发一个新的 feature,最好新建一个分支

  • git branch -d <branchName>

删除一个分支

  • git branch -D <branchName>

如果丢弃一个没被合并过的分支,需要通过强行删除

17. 多人协作

  • git remote

查看远程库信息

  • git remote -v

查看远程库更详细的信息

  • git push origin master
  • git push origin <branchName>
  • 将该分支上所有本地提交推送到远程库

但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

  • master 分支是主分支,因此要时刻与远程同步;
  • dev 分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
  • bug 分支只用于在本地修复 bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个 bug;
  • feature 分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
  • 抓取分支

你的小伙伴已经向 origin/…. 分支推送了他的提交,而碰巧你也对同样的文件作了修改,因为你的小伙伴的最新提交和你试图推送的提交有冲突。
先有 git pull 把最新的提交从 origin/…. 上拉下来,然后本地合并,解决冲突
多人协作的工作模式通常是这样:

  1. 首先,可以试图用 git push origin <branch-name> 推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用 git push origin <branch-name> 推送就能成功!

如果 git pull 提示 no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令 git branch –set-upstream-to <branch-name> origin/<branch-name>

  • git checkout -b branch-name origin/branch-name

在本地创建和远程分支对应的分支,使用 git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

  • git branch –set-upstream branch-name origin/branch-name;

建立本地分支和远程分支的关联,使用 git branch –set-upstream branch-name origin/branch-name;

18.Rebase
变基

  • git rebase

原本分叉的提交现在变成一条直线了!这种神奇的操作是怎么实现的?其实原理非常简单。我们注意观察,发现 Git 把我们本地的提交“挪动”了位置,放到了 f005ed4 (origin/master) set exit= 1 之后,这样,整个提交历史就成了一条直线。rebase 操作前后,最终的提交内容是一致的,但是,我们本地的 commit 修改内容已经变化了,它们的修改不再基于 d1be385 init hello,而是基于 f005ed4 (origin/master) set exit=1,但最后的提交 7e61ed4 内容是一致的。
这就是 rebase 操作的特点:把分叉的提交历史“整理”成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。

  • rebase 操作可以把本地未 push 的分叉提交历史整理成直线;
  • rebase 的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

19. 创建标签

  • git tag <name>

给当前分支最新提交的 commit 打一个标签(默认为 HEAD)

  • git tag

查看所有标签

  • git tag <name> <commit id>

给指定的 commit id 打标签

  • git show <tagname>

查看标签信息命令

  • git tag -a <tagname> -m“…..”

可以指定标签信息;用 - a 指定标签名,- m 指定说明文字

20. 操作标签

  • 命令 git push origin <tagname> 可以推送一个本地标签;
  • 命令 git push origin –tags 可以推送全部未推送过的本地标签;
  • 命令 git tag -d <tagname> 可以删除一个本地标签;
  • 命令 git push origin :refs/tags/<tagname> 可以删除一个远程标签。

21. 使用 GitHub

  • 在 GitHub 上,可以任意 Fork 开源仓库;
  • 自己拥有 Fork 后的仓库的读写权限;
  • 可以推送 pull request 给官方仓库来贡献代码。

22. 使用码云

  • git remote add

使用该命令,把本地库和远程库关联起来

  • git remote -v

查看远程库信息

  • git remote rm origin

删除已有名为 origin 远程库

当然一个本地库,可以同步多个远程库信息

  • git remote add github git@github.com:michaelliao/learngit.git

本地库和远程叫 github 的库关联起来

  • git remote add gitee git@gitee.com:liaoxuefeng/learngit.git

本地库和远程叫 gitee 的库关联起来

  • git push github master

已送到 github 远程库

  • git push gitee master

推送到 gitee 远程库

23. 忽略特殊文件
在 Git 工作区的根目录下创建一个特殊的.gitignore 文件,然后把要忽略的文件名填进去,Git 就会自动忽略这些文件
忽略文件的原则是:

  1. 忽略操作系统自动生成的文件,比如缩略图等;
  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如 Java 编译产生的.class 文件;
  3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
  • git check-ignore

检查某个文件忽略的出处,例如:git check-ignore -v App.class
.gitignore:3:*.class App.class
Git 告诉我们,.gitignore 的第 3 行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。

正文完
 0

git学习笔记

143次阅读

共计 2253 个字符,预计需要花费 6 分钟才能阅读完成。

一、git 基本操作
git init 初始化工程
git clone url 克隆工程

add && commit && push && pull && status

git add .(git add -A)添加全部修改文件,包括 untracked 的文件
git add -u 添加修改的文件,不包括新建的文件
git commit -m ‘ 提交信息 ’ 提交已经添加缓存区的文件
git commit -a -m ‘ 提交信息 ’ 提交修改过的文件(包括未添加到缓存区的)
git push -u origin master 加了参数 - u 后,以后即可直接用 git push 代替 git push origin master
git push -f 强制提交(适用于旧版本覆盖新版本)
git pull 拉取最新代码
git status 查看状态(commit 前的状态)
git status -s 查看简洁版
git diff 查看修改内容

远端 remote

git remote -v 查看远端地址
git remote set-url origin [url] 修改远端地址
git remote -v 查看远端链接
git remote rm origin 删除远端链接
git remote add origin url 添加远端链接

log

git log 查看历史记录
git log –pretty=oneline 查看历史记录(commit id 和 commit 信息)
git log –oneline 简洁版
git log -p 文件名 查看指定文件的提交历史
git blame 文件名 以列表的形式查看指定文件的提交历史

checkout

git branch (分知名) 创建分支
git checkout (分知名) 切换分支
git branch -d (分支名) 删除分支

tag

git tag -a v1.0 打上 v1.0 标签
git tag 查看标签
git tag -d v1.0 删除 v1.0 标签
git push –tags 上传所有的标签

编辑界面

cat 查看文件内容
git vim 编辑器基本操作
按 a/i/ o 进入编辑模式
按 ECS 进入操作模式
在操作模式下,:wq 保存退出,:q! 不保存退出

撤销
撤销文件的修改
git checkout head xx 文件 撤销 xx 文件的修改
撤销 add
git reset HEAD 撤销全部的 add
git reset HEAD xx 文件 撤销 xx 文件 add
撤销 commit
git commit –amend 修改最后一次提交(补提交或者修改 message 的情况下使用)
git reset [–mixed, –soft, –hard] [head^, head~1, head~2] 回退版本
–mixed:默认参数,git reset –mixed head^ 和 git reset head^ 是一样的效果,撤销 commit 和 add,不删除工作区的代码
–soft:撤销 commit,不撤销 add,不删除工作区代码
–hard:撤销 commit 和 add,删除工作区代码
head^:回退到上个版本
head~1, head~2:回退到上一个版本,回退到上两个版本
git reset –hard commit_id 回退到指定的版本
git reflog 查看历史命令,可以回到未来的版本

生成 ssh key
1. 配置

git config --global  user.name "这里换上你的用户名"
git config --global user.email "这里换上你的邮箱"

2. 生成秘钥

ssh-keygen -t rsa -C "这里换上你的邮箱"

来自 https://blog.csdn.net/lqlqlq0…

开发流程
1. 取最新的 master 代码,在 master 分支上 git pull
2. 创建个人分支 git branch branchName
3. 切换至个人分支 git checkout branchName
4. 进行开发
5. 进行提交 git add . 和 git commit -m ‘message’
6. 切换到 master 分支,取最新代码 git pull
7. 切回个人分支,rebase 并解决冲突:git rebase master
8.push 到个人分支 git push origin branchName
9. 创建 pull request 请求
10. 合并到 master 分支

二、git 常用命令
1)mkdir test 创建文件夹 test
2)rm -r test 删除文件夹 test
3)rm -rf .git 移除之前提交的 git
4)pwd 查看当前路径
5)touch index.html 创建 index.html
6)rm index.html 删除 index.html
7)ls 列出文件
8)mv index.html test.html 将 index.html 文件重命名为 test.html
9)vim index.js 进入编辑 index.js 文件
10)shift + ; + wq 保存退出

三、git 快捷键
1)ctrl + u 删除光标前字符
2)ctrl + k 删除光标后的字符
3)ctrl + w 删除光标前一个单词(相连在一起的)
4)ctrl + a 光标移到最前面
5)ctrl + e 光标移到最后面
6)ctrl + r 查找之前执行过的命令
7)ctrl + b 光标向前移一位
8)ctrl + f 光标向后移一位
9)ctrl + p 上一条命令
10)ctrl + n 下一条命令
11)ctrl + h 删除光标前一个字符
12)ctrl + d 删除光标后一个字符
13)ctrl + l 清屏
14)reset 清屏
15)alt + b 移至前一个单词前面
16)alt + f 移至后一个单词后面
17)alt + d 删除光标后一个单词
18)shift + PageUp 向上翻页
19)shift + PageDown 向下翻页

转自:https://www.cnblogs.com/bear-…

正文完
 0

GIT学习笔记

142次阅读

共计 2843 个字符,预计需要花费 8 分钟才能阅读完成。

笔记整理自廖雪峰老师 Git 教程
创建本地版本库
1、创建版本库
`git init`

2、把文件添加到仓库(从工作区到暂存区)
`git add readme.txt`
`git add .`

3、把文件提交到仓库(从暂存区到当前分支)
`git commit -m ‘commit’`

添加到远程库
4、添加一个远程库:生成 http://xxx.git
5、要查看远程库的信息,用 git remote,或者,用 git remote - v 显示更详细的信息
6、关联已有的本地仓库
`git remote add origin xxx.git` (origin 是远程库的名字)

7、把本地库的所有内容推送到远程库上,把当前分支 master 推送到远程
第一次推送 master 分支,加上 - u 参数,把本地的 master 分支和远程的 master 分支关联起来
`git push -u origin master`

把本地的修改提交到远程的 master 分支
`git push origin master`

如果我们只有一个 master 分支,就可以直接:
`git push`

从远程库拉取项目
8、要克隆一个仓库,首先必须知道仓库的地址,然后使用 git clone 命令克隆
`git clone http://xxx.git`

熟练使用以上步骤就可以愉快的使用 git 了,但是想要更进一步,还需要往下看:
工作区和暂存区
工作区就是你本地的项目文件夹,版本库是工作区里的.git 文件。
Git 的版本库里存了很多东西,其中最重要的就是称为 stage(或者叫 index)的暂存区,还有 Git 为我们自动创建的第一个分支 master,以及指向 master 的一个指针叫 HEAD。
我们使用 git 提交可以看为三步:第一步是用 git add 把文件添加进去,实际上就是把文件修改添加到暂存区;第二步是用 git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支;第三步是用 git push 把本地分支中的修改提交到远程库
其他操作
9、HEAD 指向的版本就是当前版本,Git 允许我们在版本的历史之间穿梭,使用命令 git reset –hard commit_id10、穿梭前,用 git log 可以查看提交历史,以便确定要回退到哪个版本, 用 git log –graph 命令可以看到分支合并图 11、要重返未来,用 git reflog 查看命令历史,以便确定要回到未来的哪个版本
12、git status 查看版本库状态 13、用 git diff HEAD — readme.txt 命令可以查看工作区和版本库里面最新版本的区别 14、git checkout — file 可以丢弃工作区的修改(用版本库里的版本替换工作区的版本)15、用命令 git reset HEAD <file> 可以把暂存区的修改撤销掉,重新放回工作区 16、命令 git rm 用于删除一个文件
17、查看分支:git branch18、创建分支:git branch <name>19、切换分支:git checkout <name>20、创建 + 切换分支:git checkout -b <name>21、合并某分支到当前分支:git merge <name>22、删除分支:git branch -d <name>23、如果要丢弃一个没有被合并过的分支,可以通过 git branch -D <name> 强行删除
24、Git 还提供了一个 git stash 功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作 25、用 git stash list 命令查看保存的工作区 26、用 git stash apply 恢复工作现场,但是恢复后,stash 内容并不删除 27、用 git stash drop 来删除 stash 内容 28、用 git stash pop,恢复的同时把 stash 内容也删了
29、本地新建的分支如果不推送到远程,对其他人就是不可见的,30、从本地推送分支,使用 git push origin branch-name,如果推送失败,先用 git pull 抓取远程的新提交 31、在本地创建和远程分支对应的分支,使用 git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致 32、建立本地分支和远程分支的关联,使用 git branch –set-upstream branch-name origin/branch-name33、从远程抓取分支,使用 git pull,如果有冲突,要先处理冲突
34、git rebase 操作可以把本地未 push 的分叉提交历史整理成直线;35、git rebase 的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比
36、命令 git tag <tagname> 用于新建一个标签,默认为 HEAD,也可以指定一个 commit id37、命令 git tag -a <tagname> -m “blablabla…” 可以指定标签信息 38、命令 git tag 可以查看所有标签,标签不是按时间顺序列出,而是按字母排序的 39、可以用 git show <tagname> 查看标签信息,可以看到说明文字 40、命令 git push origin <tagname> 可以推送一个本地标签;41、命令 git push origin –tags 可以推送全部未推送过的本地标签;42、命令 git tag -d <tagname> 可以删除一个本地标签;43、命令 git push origin :refs/tags/<tagname> 可以删除一个远程标签。
44、忽略某些文件时,需要编写.gitignore;45、.gitignore 文件本身要放到版本库里,并且可以对.gitignore 做版本管理!46、被忽略的文件,可以用 - f 强制添加到 Git47、可以用 git check-ignore 命令检查.gitignore 哪个规则写错了
配置别名
48、配置别名:git config –global alias.st status,–global 参数是全局参数,也就是这些命令在这台电脑的所有 Git 仓库下都有用
git config –global alias.lg “log –color –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit”
49、每个仓库的 Git 配置文件都放在.git/config 文件中,可以手动修改配置,别名就在 [alias] 后面,要删除别名,直接把对应的行删掉即可,而当前用户的 Git 配置文件放在用户主目录下的一个隐藏文件.gitconfig 中
git 命令总结
远程拉取版本库
git clone http://xxx.git
cd xxx

创建新版本库
git init
git remote add origin http://xxx.git

提交更新
git add . //git rm xxx
git commit -m “Initial commit”
git push //-u origin master

正文完
 0

git学习笔记

142次阅读

共计 1502 个字符,预计需要花费 4 分钟才能阅读完成。

从 svn 转到 git 版本控制之后,就爱上了它,再配合上 github,简直不要太爽, 以下是结合多方查询之后,总结出来适用于自己的 git 笔记!

配置
配置账号信息
git config -e [–global] #编辑 Git 配置文件

git config –global user.name itxcc
git config –global user.email itxcc420@gmail.com

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

git help config #获取帮助信息
配置密钥
ssh-keygen -t rsa -C itxccc420@gmail.com #生成密钥

ssh -T git@github.com #测试是否成功
配置别名
git config –global alias.st status #git st
git config –global alias.co checkout #git co
git config –global alias.br branch #git br
git config –global alias.ci commit #git ci
基础命令
git init #初始化

git status #文件状态

git add [file1] [file2] … #. 或 * 代表全部添加

git commit -m “msessage”
备注:
– type(文件):‘备注’
– – feat: 新功能
– – fix: 修复 bug
– – style:格式
– – refactor:代码重构
– – chore:项目构建

git push origin 分支名称 #推送到某个分支

git log #查看所有提交记录
git reflog #不小心删除了东西,先查到 commit id,恢复

git branch #显示所有本地分支
git branch test #新建 test 分支
git push git test #推送 test 分支到远程
git checout test #切换到 test 分支
git merge test #将 test 分支合并到当前分支
git branch -d test #删除 test 分支
git push origin -d test #删除远程 test 分支

git rebase master# 将 master 分之上超前的提交,变基到当前分支
git rebase –onto master 169a6 #限制回滚范围,rebase 当前分支从 169a6 以后的提交
git rebase –interactive #交互模式
git rebase –continue# 处理完冲突继续合并
git rebase –skip# 跳过
git rebase –abort# 取消合并

git tag #列出现有标签

git tag v0.1 [branch|commit] # [从指定位置] 新建标签
git tag -a v0.1 -m ‘my version 1.4’# 新建带注释标签

git checkout tagname# 切换到标签

git push origin v1.5# 推送分支到源上
git push origin –tags# 一次性推送所有分支

git tag -d v0.1# 删除标签
git push origin :refs/tags/v0.1# 删除远程标签

开发流程

一般而言,会有两个公共分支
master(项目主分支)
dev(测试分支)
开发一般是需要在自己的分支进行开发,然后推送到远端,本地则需要 git merge 本地分支来进行更新 dev 分支,如果是多人开发,则需要 git pull 来更新 dev 分支
在开发需要下拉代码时,远程仓库和本地刚好又有改动,最好先将自己在本地的代码进行 git stash(暂存区),再去进行下拉,在运行 git stash pop 把自己的代码释放出来
添加 tag
git tag -a v0.0.0 -m ‘v0.0.0’
git push — tag

正文完
 0

Git 学习笔记

143次阅读

共计 4751 个字符,预计需要花费 12 分钟才能阅读完成。

最近公司的代码管理工具要从 SVN 转到 Git 上,因此虽然之前用过 Git,但是都是一些简单的推送提交,因此还是有必要进行一些系统的学习,这里做一下笔记,以备后询,且不定期更新。
关于 SVN 和 Git 的比较已经有很多文章说过了,就不再赘述,本文的重点是如何使用常用的 Git 命令进行操作,冷门的就不说了,且比较零散,系统的学习推介廖雪峰的 Git 教程。
声明
下面用户名都为 SHERlocked93,请自行修改成自己的用户名
1. 概览

工作区 Workspace
暂存区 Stage / Index
本地仓库 Repository
远程仓库 Remote

2. 修改
2.1 暂存修改
操作一览

操作
bash

创建 stash
git stash

查看
git stash list

应用
git stash apply stash@{<num>}

删除
git stash drop stash@{<num>}

还原上一个暂存并删除暂存 (如无 conflict)
git stash pop

如果在工作的时候出现了临时需要解决的问题,而你又不希望提交,那么有个 stash 功能
git stash
在暂存后工作区会回退到最近的一个 commit 的状态,以便开建新分支;比如我们修复 bug 时,我们会通过创建新的 bug 分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场 git stash 一下,然后去修复 bug,修复后,再 git stash pop,回到工作现场。
2.2 撤销修改
还未提交到暂存区
当修改还没有被 add 的时候,可以使用
git checkout — filename.txt
来丢弃工作区某文件的修改,当然也可以把后面的文件改成 * 来撤销所有文件的修改。这是用仓库的文件覆盖工作区的文件。
注意这里用的是 –,如果没有这个 – 的话就变成切换分支了。
还未提交到仓库
如果你的修改已经被 add 到了暂存区,但是还没有被 commit,那么可以使用
git reset HEAD filename.txt
git checkout — filename.txt
首先用 reset 来把修改撤回到工作区,再使用上面的 checkout 命令撤回工作区的修改。这里的 reset 相当于 add 的反操作。
已经提交到仓库
则可以版本回退
git reset –hard 15zdx2s
这里的 –hard 表示强制回退,丢弃本地的修改。这个回退比较野蛮,该版本号之后的提交都将不可见。
撤销之前某一个提交
git revert 撤销一个提交的同时会创建一个新的提交,这是一个安全的方法,因为它不会重写提交历史。但实现上和 reset 是完全不同的。它撤销这个提交引入的更改,然后在最后加上一个撤销了更改的新提交,而不是从项目历史中移除这个提交。
git revert 46af7z6
相较于 reset,revert 不会改变项目历史,对那些已经发布到共享仓库的提交来说这是一个安全的操作。其次 git revert 可以将提交历史中的任何一个提交撤销、而 reset 会把历史上某个提交及之后所有的提交都移除掉,这太野蛮了。
相比 reset,它不会改变现在的提交历史。因此,revert 可以用在公共分支上,reset 应该用在私有分支上。
合并 commit
如果已经 commit 了怎么办,如果要撤回目前的 commit,可以把它合并到上一个 commit 中
git rebase -i HEAD~~
在出现的两个提交信息的 pick 改为 fixup
3. 分支操作
3.1 创建 / 查看 / 合并分支
操作一览

操作
bash

查看分支
git branch

查看本地和远程分支
git branch -a

在 target 分支上创建分支,没有则从当前分支
git branch <branch-name> <target-branch>

创建并切换分支
git checkout -b <branch-name>

合并某分支到当前分支
git merge <branch-name>

删除分支,只能删参与了合并的
git branch -d <branch-name>

强行删除
git branch -D <branch-name>

删除远程分支
git push origin :<remote-branch-name>

创建分支
# 创建新分支
git branch bug-fix
# 查看分支,- a 查看本地和远程的分支,- r 查看远程分支,- l 或没有只查看本地
git branch -a
# 切换到刚刚创建的分支
git checkout bug-fix
上面两个步骤可以合并为
# 创建并切换到分支
git checkout -b bug-fix
如果修改一下本地文件之后在这个分支继续培育一个版本之后,怎么去合并到主分支呢
git add *
git commit -m “some change”
# 切换到主分支
git checkout master
# 合并分支
git merge bug-fix
# 删除分支 (可选)
git branch -d bug-fix
如果 master 分支和新的分支都各自培育了版本,那么自动合并通常会失败,发生冲突 conflict,此时需要打开文件解决冲突之后 commit 一个版本以完成合并
git add *
git commit -m “branch merge”
这里提一下,merge 的时候有几个主要模式,–no-ff、fast-forward,其中 fast-forward 是默认的

fast-forward:在 master 开始的新分支前进了几个版本之后如果需要 merge 回来,此时 master 并没有前进,那么这个模式就是把 HEAD 与 master 指针指向新分支上,完成合并。这种情况如果删除分支,则会丢失分支信息,因为在这个过程中并没有创建 commit。

–no-ff:关闭默认的 fast-forward 模式,也就是在 merge 的时候生成一个新的 commit,这样在分支历史上就可以看出分支信息。

3.2 远程仓库操作
操作一览

操作
bash

克隆
git clone <url>

添加远程仓库
git remote add <name> <url>

删除远程仓库
git remote rm <name>

拉取
git pull <remote-branch-name> <local-branch-name>

推送本地所有分支到远程
git push –all origin

推送到远程同名分支
git push origin <local-branch-name>

推送本地分支到远程 master
git push origin <local-branch-name>:master

把当前本地分支推送并创建到远程
git push origin

检出远程分支
git checkout -b <new-local-branch-name> origin/<remote-branch-name>

关于各个分支,哪些需要推送呢

master 分支是主分支,因此要时刻与远程同步;

dev 分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

bug 分支只用于在本地修复 bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个 bug;

feature 分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

直接 clone

在 github 上创建一个新的项目之后,比如叫 learn-git,那么可以直接 clone 下来,注意创建的时候不要选择 Initialize this repository with a README,我们要的是一个空的仓库
git clone https://github.com/SHERlocked93/learn-git.git
这样在本地就直接创建了一个空的文件夹 learn-git,当然里面有.git 文件夹。也可以使用 SSH 地址来 clone,速度会快一些,也不用每次推送都输入口令,推介使用这种
git clone git@github.com:SHERlocked93/learn-git.git
添加一个文件 filename.txt 之后
git add filename.txt
git commit -m “add filename.txt”
git push -u origin master
这样就把本地新建的文件 push 到了远程仓库
本地与远程建立关联
如果已经有了本地工程文件夹,如何分享到 github 远程仓库呢,当然此时我们已经在 github 上创建了一个新的空白项目,还是叫 learn-git,在本地文件夹中
git init
# 关联远程库
git remote add origin git@github.com:SHERlocked93/learn-git.git
git push -u origin master
就可以了,如果你的远程仓库已经有了提交,那么在 push 之前需要
# 允许不想干库合并
git pull origin master –allow-unrelated-histories
git push -u origin master
先拉取远程分支,注意这里 –allow-unrelated-histories 允许两个不想干的分支强行合并,再 push;这样在 github 的网站上还能看到 commit 记录。
也可以强硬一点直接强行推送
# -f 强行推送
git push -u origin master -f
这样本地仓库就直接把远程仓库覆盖了,且 github 上也看不到历史 commit 了,如果不想被同事枪击的话,还是推介上一种做法。
同步远程仓库
那么已经 clone 的仓库如果希望同步原仓库新的提交怎么办
# 从远程分支拉取代码到本地
git pull upstream master
# push 到自己的库里
git push origin master
3.3 多人协作
多人协作的工作模式通常是这样:

首先,可以试图用 git push origin <branch-name> 推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用 git push origin <branch-name> 推送就能成功

从远程抓取分支,使用 git pull,如果有冲突,要先处理冲突,add->commit->push。如果 git pull 提示 no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令 git branch –set-upstream-to <branch-name> origin/<branch-name>。
4. 标签操作
操作一览

操作
bash

查看所有标签
git tag

新建标签
git tag <tagname>

新建并制定说明
git tag <tagname> -m <message> <bash>

查看标签说明
git show <tagname>

删除标签
git tag -d <tagname>

推送某个标签到远程
git push origin <tagname>

推送所有未推送到远程的本地标签
git push origin –tags

合并远程仓库的标签到本地
git pull origin –tags

删除远程标签
git push origin :refs/tags/<tagname>

如果要删除远程分支,需要
# 首先删除本地 tag,假如 tag 是 v0.9
git tag -d v0.9
# 再从远程删除
git push origin :refs/tags/v0.9
5. 提交格式
type:

feat: 新特性,添加功能
fix: 修改 bug
refactor: 代码重构
docs: 文档修改
style: 代码格式修改, 注意不是 css 修改
test: 测试用例修改
chore: 其他修改, 比如构建流程, 依赖管理.

网上的帖子大多深浅不一,甚至有些前后矛盾,在下的文章都是学习过程中的总结,如果发现错误,欢迎留言指出~

推介阅读:

廖雪峰 – Git 教程
github 实现本地仓库与远程仓库同步
图解 Git 命令
git 基本操作,一篇文章就够了!
团队协作中的 Github flow 工作流程
git 命令大全

附件
Git 常用命令速查表:

正文完
 0