首页 git版本控制
文章
取消

git版本控制

版本控制

Git

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 与 SVN 区别

  1. Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。

  2. Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。

  3. Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。

  4. Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。

  5. Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

git安装

https://git-scm.com/downloads

Git 配置

  • 用户配置
    • 配置个人的用户名称和电子邮件地址:
      $ git config --global user.name "runoob"
      $ git config --global user.email [email protected]
      
  • 查看配置信息
      $ git config --list
    
  • git生成ssh密钥
    1. 生成ssh key。
        $ ssh-keygen -t rsa -C "[email protected]"
      

      后面的邮箱改成自己的,之后会要求确认路径和输入密码,使用默认的一路回车就行。成功的话会在 ~/ 下生成 .ssh 文件夹,进去,打开 id_rsa.pub,复制里面的 key。 回到 git服务器上,进入账户配置添加ssh key。

  1. 验证ssh key
     $ ssh -T [email protected]
    

获取与创建项目命令

git init

用 git init 在目录中创建新的 Git 仓库。 你可以在任何时候、任何目录中这么做,完全是本地化的。

1
git init

git clone

使用 git clone 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。

1
git clone [url]

基本快照

git add

git add 命令可将该文件添加到缓存

1
2
3
git add <filename>

git add .

git status

git status 以查看在你上次提交之后是否有修改。

1
2
git status
git status -s

git diff

执行 git diff 来查看执行 git status 的结果的详细信息。

git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景。

  • 尚未缓存的改动:git diff
  • 查看已缓存的改动: git diff –cached
  • 查看已缓存的与未缓存的所有改动:git diff HEAD
  • 显示摘要而非整个 diff:git diff –stat

git commit

使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中。

Git 为你的每一个提交都记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址。

1
2
git config --global user.name 'yourname'
git config --global user.email youremail

将文件写入缓存区并提供提交注释

1
2
3
4
5
git commit -m 'update'

git commit -m 'add files'

git commit -m 'delete files'

git reset HEAD

git reset HEAD 命令用于取消已缓存的内容。

1
2
3
4
5
6
git reset HEAD -- <filename>
//上一个版本就是 HEAD^,上上一个版本就是 HEAD^^ 或者 HEAD~2,HEAD~100
git reset --hard HEAD^
git reset --hard 1094a
//git reflog用来记录你的每一次命令
git reflog

拉取(更新代码)与推送

git pull

git pull命令用于从另一个存储库或本地分支获取并集成(整合)。git pull命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并,它的完整格式稍稍有点复杂。

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

将远程存储库中的更改合并到当前分支中。在默认模式下,git pullgit fetch后跟git merge FETCH_HEAD的缩写。更准确地说,git pull使用给定的参数运行git fetch,并调用git merge将检索到的分支头合并到当前分支中。

git push

git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相似。

1
2
git push
git push <远程主机名> <本地分支名>:<远程分支名>

分支管理

创建与合并分支

1
2
3
4
5
6
7
8
9
10
11
12
git checkout -b dev
//相当于以下两条命令
git branch dev
git checkout dev
//查看当前分支
git branch
//切换回master分支
git checkout master
//把dev分支的工作成果合并到master分支
git merge dev
//删除dev分支
git branch -d dev

切换分支这个动作,用switch更科学

1
2
3
4
//创建并切换到新的dev分支
git switch -c dev
//切换到已有的master分支
git switch master

解决冲突

1
2
3
4
5
6
7
git merge feature1
//合并
git add readme.txt
//提交合并
git commit -m "conflict fixed"
//删除feature1分支
git branch -d feature1

bug分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//当前工作现场“储藏”起来
git stash
//假定在master分支上修复,就从master创建临时分支
git checkout master
git checkout -b issue-123
//提交
git add readme.txt
git commit -m "fix bug 123"
//切换到master分支,并完成合并,最后删除issue-123分支
git switch master
git merge --no-ff -m "merged bug fix 123" issue-123
//回到dev分支
git switch dev
//工作现场
git stash list
//恢复工作现场
git stash apply stash@{0}
git stash apply 恢复后,stash内容并不删除,你需要用git stash drop来删除
git stash pop 恢复的同时把stash内容也删了(推荐)
//bug提交的修改“复制”到当前分支,如:git cherry-pick 4c805e2
git cherry-pick <commit>

Feature分支

1
2
3
4
5
6
7
8
9
10
//创建分支
git switch -c feature-shop
//开发完毕
git add shop.java
git status
git commit -m "add feature shop"
//切回dev,准备合并
git switch dev
//此时,因各种原因新功能必须取消!强行删除
git branch -D feature-shop

多人协作

1
2
3
4
5
6
7
8
9
10
11
//查看远程库的信息
git remote -v
//拉取
git pull
//拉取失败,设置dev和origin/dev的链接
git branch --set-upstream-to=origin/dev dev
//再次拉取
git pull
//推送分支
git push origin master
git push origin dev

Svn

配合TortoiseSVN使用

参考

本文由作者按照 CC BY 4.0 进行授权

算法与数据结构简介

MemCached笔记

载入天数...载入时分秒...