Git命令使用笔记

Git中文件管理三种状态:

已修改(modified)

在工作目录中修改Git文件

已暂存(staged)

对已经修改的文件执行暂存操作,存入暂存区

已提交(committed)

将已暂存的文件执行Git提交操作,存入本地版本库


Git安装

Linux:

sudo apt-get install git


Mac:

安装命令行工具(如已安装Xcode,命令行工具会在首次启动Xcode时提示安装)

homebrew(mac上安装软件常用工具)

macports


Windows:

通过msyspit(http://code.google.com/p/myysgit)


安装后建议使用Git命令行,如果要使用GUI,推荐使用SourceTree工具,有Mac和Windows版本。


第一步创建本地仓库

切换到仓库目录后执行:git init


man git 查看git帮助文档

git add 将已修改的文件放入暂存区

git commit 将暂存区中的文件提交到本地仓库

git commit -am 'message' 将工作区中的修改直接添加到暂存区并提交到本地版本库中

git rm 删除版本库中的文件

git help 查看帮助

git log 查看日志 git log -3 查看最近3条的操作日志

格式化,每一条操作日志为一行

git log --pretty=oneline

git log --pretty=format:"%h-%an,%ar:%s"


git diff 比较工作区与暂存区中的文件差别,暂存区中作为源文件

git diff HEAD 比较工作区与当前分支最新提交的文件差别

git diff --cached 比较暂存区与最新提交文件差别

git pull 从远程版本库拉取到本地版本库

git push 将本地版本库推送到远程版本库

git config --local user.name "name" 设置名称

git config --local user.email "name@xx.com" 设置邮箱

git checkout -- filename  撤销修改,将文件内容恢复到暂存区中最新状态

git reset HEAD filename 将暂存区中的文件恢复成已修改状态


修正上一次提交的注释内容

git commit --amend -m 'it is a right message'


在git仓库根目录下创建.gitignore文件,里面的内容被git忽略,不加入版本管理中

.gitignore

noneed.txt

*.properties

!b.properties

conf/

allconf/**/*.txt


以当前分支基础上创建分支

git branch branchname

切换到分支

git checkout branchname

分支修改名称

git branch -m branchname newbranchname

删除本地分支

git -d branch mydev

删除远程分支方式一:将一个空分支推送到远程dev分支即为身删除,:前面有一个空格

git push origin  :dev

删除远程分支方式二

git push origin --delete dev

如果要删除的分支有过文件修改可以使用

git -D branch mydev

创建新的分支并切换到新分支

git checkout -b newbranch

将当前分支(newbranch)推动到远程版本库,并在远程版本库中建立newbranch分支

git push --set-upstream originnewbranch

以远程dev分支为基准,在本地创建dev分支与之关联

git checkout -b dev origin/dev

将另一个分支的文件合并到当前分支

git merge newbranch

查看本地分支的上一次提交注释

git branch -v

查看本地和远程所有分支上一次提交注释

git branch -av

将当前分支上的修改暂时保存

git stash save 'save message'

恢复上一个保存,并从stash列表中删除

git stash pop

恢复某个保存,不从stash列表中删除,不指定stash id的话默认恢复上一个保存

git stash apply [stash id]

查看stash列表

git stash list

删除stash列表中某个记录

git stash drop stash@{0}

查看某个文件的修改历史

git blame filename

比较暂存区和工作区文件内容的区别,暂存区作为源文件 --

git diff test.txt

比较最新提交的和工作区文件的区别,最新提交的作为源文件 --

git diff HEAD test.txt

比较最新提交和暂存区文件的区别,最新提交的作为源文件 --

git diff --cached test.txt



注:HEAD永远指向当前的分支。

注:当分支合并时,如果当前分支的log版本低于要merge的分支时,会直接fast-forward,而不会出现版本冲突问题。

注:当文件被修改后(未提交暂存区),执行git checkout -- file 会将文件的修改丢弃,恢复为上一个版本暂存区的内

容。如果已提交到暂存区,则需要先执行git reset HEAD file先将文件从暂存区中恢复到已修改状态,再丢弃修改,恢

复为上一个版本暂存区的内容。总之,git checkout -- file 修改的是工作区,将工作区的内容恢复成暂存区的版本。


使用git连接github远程仓库

首先创建github仓库,再在本地建立git仓库。

关联本地仓库和github仓库

git remote add origin git@github.com:yinhaonefu/mygit.git

查看远程分支 git remote show origin 如果显示如下信息

$ git remote show origin
The authenticity of host 'github.com (192.30.253.113)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.253.113' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

因为github远程仓库中没有放置本地的公钥,所以访问失败。

使用ssh-keygen生成公钥,默认在当前用户目录中.ssh中。

$ /usr/bin/ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/yinhao/.ssh/id_rsa):回车
Enter passphrase (empty for no passphrase):回车
Enter same passphrase again:回车
Your identification has been saved in /c/Users/yinhao/.ssh/id_rsa.
Your public key has been saved in /c/Users/yinhao/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:wkBh5aTLuttfWhcZR4OV0rCuBeOogPoLyosPd/YDOmQ yinhao@ZB-3PYK442
The key's randomart image is:
+---[RSA 2048]----+
|    +oo   .=+.   |
|   o +    ooo.   |
|    o . o o..    |
| . . + o + +     |
|. . o + S =      |
|. Eo.. . o .     |
|+oo.+.  + .      |
|+=o= ..+ .       |
|o+B+..+.         |
+----[SHA256]-----+

然后将.ssh目录下的id_rsa.pub中的公钥内容设置到github中。

在github对应的仓库点击Settings-Deploy keys-Add deploy key将公钥保存后再查看远程信息

$ git remote show origin
* remote origin
  Fetch URL: git@github.com:yinhaonefu/mygit.git
  Push  URL: git@github.com:yinhaonefu/mygit.git
  HEAD branch: (unknown)

公钥设置成功,然后可以正常推送到github远程代码库中

$ git push -u origin master
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 299 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To github.com:yinhaonefu/mygit.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.


从已经存在的远程仓库克隆到本地mygitname目录下

git clone git@github.com:yinhaonefu/mygit.git mygitname

查看远程信息

git remote show

查看所有分支,包括本地和远程

git branch -a

从远程拉取代码

git pull = git fetch + git merge


git 别名功能

git config --global alias.br branch  使用br代替branch命令功能

git config --global alias.unstage 'reset HEAD' 也可以给组合命令设置别名

这些映射关系,因为是global作用域,会保存在当前用户home目录下的.gitconfig文件中

$ cat ~/.gitconfig
[alias]
        br = branch
        unstage = reset HEAD





阅读更多
换一批

没有更多推荐了,返回首页