jkhhuse/blog

git使用

Opened this issue · 0 comments

1.创建账户

安装完成后创建账户

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

可以通过如下命令查看git的配置

$ git status

2.创建版本库

$ cd dir
$ mkdir repo
$ git init

会在repo目录下生成一个.git文件,用于跟踪/管理版本库。

3.添加文件

$ touch readme.txt
$ git add readme.txt

$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   readme.txt
        new file:   user git/status.jpg

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   readme.txt

3.提交文件

$ git commit -m "append"
[master (root-commit) 1e57831] append
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 readme.txt
 create mode 100644 user git/status.jpg

使用git log命令可以看到提交的日志

4.状态变化

新建一个文件,未添加前状态为“Untracked”,即未被Git版本追踪:

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        readme.txt

nothing added to commit but untracked files present (use "git add" to track)

添加文件

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   readme.txt

commit一个文件:

jk@jk-pc /cygdrive/e/learn/git/img
$ git status
On branch master
nothing to commit, working tree clean

5.版本回退

通过git log查看提交记录

$ git log
commit 1e5783173a17ea5fc2cd9849cfa74214ef2da4e8
Author: name <email@example.com>
Date:   Mon Mar 27 04:57:05 2017 +0100

    append 

使用reset命令,回退版本

$ git reset --hard 1e5783173a17ea5fc2cd9849cfa74214ef2da4e8

6.清空工作区文件的状态

$ git checkout -- readme.txt

7.删除命令

$ git rm readme.txt

8.远程仓库

无密码配置

i) 生成ken-gen
$ ssh-keygen -t rsa -C "youremail@example.com"
window下把生成的私钥(id_rsa)与公钥(id_rsa.pub)拷贝到cygwin目录下:
cp /C/Users/user_name/.ssh/* /home/user_name/.ssh/

ii) 配置GitHub SSH Keys
拷贝公钥到->GitHub->Account->Settings->SSH Keys

本地仓库与远程仓库关联

i) 本地创建仓库

$ mkdir repo
$ cd repo
$ git init
$ touch readme.txt
$ git add readme.txt
$ git commit -m "test"

ii) 创建远程仓库
在Github中创建一个同名仓库
iii) 把本地仓库内容推送到远程仓库

$ git remote add origin git@github.com:jkhhuse/repo.git

iv) 把本地仓库内容推送到远程仓库

$ git push -u origin master

加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,
还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

克隆远程仓库到本地
$ git clone git@github.com:jkhhuse/repo.git

9.分支管理

分支操作

i) 创建分支

$ git checkout -b dev
#相当于
$ git branch dev #创建分支
$ git checkout dev #切换到dev分支

ii) 查看分支

$ git branch
* dev
  master

*表示当前操作的branch
iii) 合并分支
切换到master后,合并dev分支

$ git checkout master
$ git merge dev

iv) 删除分支
除非需要将分支推送到远程仓库,否则分支就是个人所见的。

$ git branch -d dev

v) 查看分支

$ git branch
更新本地仓库
$ git pull

如果出现冲突则,可以使用diff命令查看差异。

git diff <source_branch> <target_branch>
冲突处理

在merge过程中,出现的冲突时:

$ git merge feature1
error: Merging is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容:

<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

修改出现冲突的文件,重新add并commit。
使用git log命令可以看到分支并不的情况:

$ git log --graph --pretty=oneline --abbrev-commit
*   59bc1cb conflict fixed
|\
| * 75a857c AND simple
* | 400b400 & simple
|/
* fec145a branch test

最后删除分支

10.标签管理

i) 切换到需要打tag的分支:

$ git branch
$ git checkout master

ii) 使用tag命令打tag:

$ git tag v1.0

iii) 使用tag查看所有tag:

$ git tag

iv) 对历史commit打tag:

$ git log --pretty=oneline --abbrev-commit
$ git tag v0.9 id前10个字符

v) 设置tag的说明:

$ git tag -a v0.1 -m "version 0.1 released" 3628164

vi) 删除tag:

$ git tag -d v0.1

vii) 推送tag到远程:
例如需要把本地的tag推送到github中:

git push origin v1.0

那么在github项目的release中就会出现刚刚推送的tag。
也可以一次性推送全部的tag:

$ git push origin --tags

如果需要删除远程tag,那么需要先删除本地tag,然后push到远程来删除远程仓库中的bug:

$ git tag -d v1.0
$ git push origin :refs/tags/v1.0

参考内容:

Git tutorial: https://lvwzhen.gitbooks.io/git-tutorial
git - 简明指南: http://rogerdudler.github.io/git-guide/index.zh.html