git 常用命令

一、入门介绍

1. 配置用户和邮箱

git 配置文件存储在三个位置,分别对应系统、用户、项目;

//所有系统用户配置
git config --system user.name 'hzu'

//当前系统用户设置
git config --globle user.name "yourName"
git config --globle user.email youremail@qq.com

//局部设置: 进入项目文件下设置(某一项目)
git config user.name "yourname"
git config user.email youremail@qq.com

//查看配置
git config -l

//查看某一项配置
//git config <key>
git config user.name
git config user.email

2. 获取命令帮助

//格式
//git help <verb>

git help config

二、基础命令

单词:仓库(repository) 跟踪(track) 暂存(stage) 提交(commit) 推送(push) 拉取(pull)

获取git仓库

  1. 在现有目录中初始化git仓库(对现有的项目进行管理)
git init

git add *.c
git commit -m '提交'
  1. 克隆现有仓库
git clone 地址
//指定本地仓库的名称
git clone 地址 库名

3.记录每次更新到仓库

//1. 查看当前文件状态
git status

//2. 创建一个文件
echo 'my project' > README

//3. 再次查看会发现 Untracked 下面列出 README这个文件,现在添加跟踪.
//跟踪之后进入暂存区
git add README

//4. 状态简览
git status -s
git status --short
//输出:
 M README
MM Rakefile
A  lib/git.rb
M  lib/simplegit.rb
?? LICENSE.txt

前面字母对应的意思

字母 含义
右M 修改未放暂存区
左M 修改并在暂存区
A 新添加到暂存区
?? 新添加未跟踪
  1. 忽略文件

创建.gitignore 文件

#示例
# no .a files
*.a

# but do track lib.a, even though you're ignoring .a files above
!lib.a

# only ignore the TODO file in the current directory, not subdir/TODO
/TODO

# ignore all files in the build/ directory
build/
 
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt

# ignore all .pdf files in the doc/ directory
doc/**/*.pdf
  1. 查看已暂存和已修改
// 查看未暂存的修改:工作区与暂存区的比较
git diff

// 查看已暂存的将要添加到下次提交里的内容
git diff --staged
git diff --cached
  1. 提交更新
// 1. 这种方式会启动文本编辑器以便输入本次提交的说明
git commit

// 2. 添加提交说明
git commit -m '提交说明'

// 3. 跳过使用暂存区:Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:
git commit -a -m '提交说明'
  1. 移除文件
// 1. 删除本地文件、跟踪、提交
git rm a.txt
git commit -m 'deleted a.txt'

// 2. 手动删除本地文件后:依旧需要执行
git rm a.txt

// 3. 删除跟踪,但是保留本地文件
git rm --cached a.txt

//⚠️如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f(译注:即 force 的首字母)
  1. 移动文件
git mv fileName_from fileName_to
//上面一行命令等效下面三个
mv a.txt a
git rm a.txt
git add a

查看提交历史

git log

撤销操作

  1. 提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了
git commit --amend

//示例
git commit -m 'initial commit'
git add *
git cmmit --amend
//最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。

2.取消暂存的文件

git reset HEAD fileName
  1. 撤消对文件的修改
git checkout -- fileName

远程仓库的使用

  1. 查看远程仓库
git remote -v
  1. 添加远程仓库
git remote add <shortname远程仓库的简写引用> <url> 
  1. 从远程仓库中抓取与拉取
git fetch [remote-name]
//抓取所有的远程仓库
git fetch --all
  1. 推送到远程仓库
git push [remote-name] [branch-name]
git push origin master
  1. 查看远程仓库
git remote show [remote-name] 
git remote show origin
  1. 远程仓库的移除与重命名
//重命名
git remote rename oldname newname

//移除
git remote rm newname

打标签

  1. 列出标签
git tag
git tag -l 'v1.8.*'
  1. 创建标签

标签分为 轻量级标签附注标签;一个轻量标签很像一个不会改变的分支 - 它只是一个特定提交的引用。附注标签是存储在 Git 数据库中的一个完整对象。

// 1. 创建附注标签
git tag -a v1.4 -m '这是标签信息'
// 查看标签信息
git show v1.4

// 2. 创建轻量级标签,不加 -a -m
git tag v1.4-lw

  1. 后期打标签

要在那个提交上打标签,你需要在命令的末尾指定提交的校验和(或部分校验和)

//查看提交
git log --pretty=oneline

git tag -a v.14 478f06(校验和)
  1. 共享标签

默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样 - 你可以运行 git push origin [tagname],或者推送所有标签:git push origin --tags
5. 检出标签

如果你想要工作目录与仓库中特定的标签版本完全一样,可以使用 git checkout -b [branchname] [tagname] 在特定的标签上创建一个新分支

git 别名

语法:git config --global alias.别名 命令
例如: git config --global alias.ci commit

三、分支简介

1. 创建分支

$ git branch 分支名
//基于 master 分支建立特性分支
$ git branch sc/ruby_client master

创建完仍在当前分支,git并不会自动切换到新分支中去。想要新建一个分支并同时切换到那个分支上,你可以运行一个带有 -b 参数的 git checkout 命令git checkout -b newbranchName

git log --oneline --decorate 命令查看各个分支当前所指的对象,或git branch -a

2. 切换分支

git checkout branchname

3. 合并分支(冲突需要自己手动解决)

git merge branchName 将branchName 分支的内容合并到当前分支

4. 删除分支

git branch -d branchName 删除名为branchName的分支

5. 查看哪些分支已经合并到当前分支

git branch --merged

6. 查看所有包含未合并工作的分支

git branch --no-merged

7.将所有的本地分支列出来并且包含更多的信息,如每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有

git branch -v

8.拉取远程分支内容到本地

git pull
//等效:
git fetch
git merge

9.删除远程分支

git push [origin] --delete [branch-name]

10.变基

10.1 将branch-a的提交变基到master(master上也有提交)上:

git checkout branch-a
git rebase master
git checkout master
git meger branch-a

把a中的提交在master上重新播放,使得master 拥有来a中的提交

10.2 特别的:

//“取出 b 分支,找出处于 b 分支和 a 分支的共同祖先之后的修改,然后把它们在 master 分支上重放一遍”; 
git rebase --onto master branch-a branch-b

b中不包含a的提交 在master上重新播放

使用 git rebase [basebranch] [topicbranch] 命令可以直接将特性分支(即本例中的 server)变基到目标分支(即 master)上。
git rebase master server

11. 变基 vs. 合并

总的原则是,只对尚未推送或分享给别人的本地修改执行变基操作清理历史,从不对已推送至别处的提交执行变基操作,这样,你才能享受到两种方式带来的便利。

四、服务器上的 Git

1.生成 SSH 公钥

$ssh-keygen
$ cd ~/.ssh
$ ls
authorized_keys2  id_dsa       known_hosts
config            id_dsa.pub

五、git工具

1. 储藏与清理

git stash储藏会处理工作目录的脏的状态 - 即,修改的跟踪文件与暂存改动 - 然后将未完成的修改保存到一个栈上,而你可以在任何时候重新应用这些改动。

储藏工作git stash;将刚刚储藏的工作重新应用:git stash apply

六、git 分支命名建议

分支 命名 说明
主分支 master 主分支,所有提供给用户使用的正式版本,都在这个主分支上发布
开发分支 dev 开发分支,永远是功能最新最全的分支
功能分支 feature-* 新功能分支,某个功能点正在开发阶段
发布版本 release-* 发布定期要上线的功能
修复版本 bug-* 修复线上代码的 bug

此命名建议来源于网站

posted @ 2018-12-27 09:26  HHZZYY  阅读(233)  评论(0编辑  收藏  举报