git命令 学习笔记

借鉴:廖雪峰大神的git教程

手把手教你使用git

易百教程:http://www.yiibai.com/git/git_pull.html(很不错的网站)

http://blog.youkuaiyun.com/baidu_31657889/article/details/51896433

Eclipse Egit 使用教程 https://my.oschina.net/doloop/blog/221800#_Toc315382088

https://github.com/geeeeeeeeek/git-recipes

git 命令

<file>: 表示文件名  如:Test.java   *.java   .(所有文件)

git-bash 等于是一个unix shell  类似于windows 的cmd
pwd 查看当前所在路径
dir 查看当前路径下所有文件
mkdir testRepository  创建一个文件夹 testRepository
ls -ah 查看隐藏文件
touch <file> 创建文件
=============================================================================================

设置提交时显示的 名称和邮箱

git config --global user.name "tom"

git config --global user.email tom@qq.com

git config --list 命令来列出所有 Git 当时能找到的配置

 

git init   把当前目录初始化为本地库

git clone <url>  克隆远程库到本地 自动将其添加为远程仓库并默认以 “origin” 为简写

 

提交文件:

git add <file> 将“新建/修改"的文件添加到暂存区

git add  .   将工作区未提交的文件全部添加到暂存区   .(*也可以) 代表所有文件

git commit  -m "commit info"   -m后面输入的是本次提交的说明

git commit -a -m "commit info"  -a 可以省略git add命令, 自动提交已追踪的文件

git commit --amend 补充漏提交的文件

 

检查状态:

git status  检查状态  是否存在未提交的文件

git status  -s 同上, 提示更加简洁

git diff  工作区和暂存区的差异(工作区<-->xxx)

git diff <file> 比较工作区和暂存区的指定文件的差异

git diff HEAD|HEAD^|HEAD~|哈希索引值 比较版本差异

git diff HEAD HEAD~2 -- <file> 显示HEAD指向的历史提交和前2提交中文件的差异

git diff head 工作区 vs 版本库

git diff --cached 暂存区 vs 版本库 (--staged效果一样)

git ls-files --stage 暂存区的文件

git show 查看某次历史提交信息的完整信息

 

git log --pretty=oneline 查看提交日志  简化输出信息(能够看到提交说明)

git log --oneline 以简洁的一行显示,包含简洁哈希索引值

git shortlog 查看某人的提交

git reflog  查看每次命令所操作的 commit id

git log -p -2 前两次提交的差异

 

重置: git reset --hard 撤销到某次提交 git revert 撤销某次提交

git reset HEAD 改变指针, 暂存区文件回退到工作区(验证命令 git diff --cached)

git reset HEAD <file> 把文件从暂存区撤销

 

git reset --hard HEAD 清空暂存区的文件

git reset --hard HEAD^ 一个^代表回到上一个版本 

git reset --hard HEAD~10 ~10代表后退10个版本

git reset --hard 2ff22  重置指定某个版本   版本号可以只写前几位 不写完整

(工作区中未提交暂的文件依旧存在, 在暂存区, 但未commit的文件会丢失)

git reset --soft  回退到add状态, 需要commit

git reset --mixed 回到add之前的状态, 需要先add再commit

 

git rm 移除文件并移除跟踪(不然需要add删除的文件)

git rm --cached <file> 从暂存区中移除(文件任然存在), 不会被提交

git mv <file> <newFile> 改名

 

分支:

git checkout xxx   切换分支

git checkout -b xxx -b 创建并切换分支

git checkout -b xxx origin/xxx   从远端获取一个分支  在本地创建和远程分支对应的分支

git checkout -- <file> 取消工作区中文件的修改

 

git branch  -a   查看当前所有分支

git branch xxx   创建分支

git branch -d xxx  删除本地xxx分支   

(有命令可以删未被追踪的远端分支)

git push origin --delete xxx   删除远端分支 xxx

 

git branch --set-upstream-to=origin/master  关联远端master分支

git branch --set-upstream branch_name origin/branch_name 建立本地分支和远程分支的关联

 

分支合并:

git merge xxx  合并xxx分支到当前分支  默认的快速合并将看不到分支历史   使用 --no-ff 禁用Fast forward

git merge –no-ff  -m “注释” dev  禁用  fast forward   (会强制覆盖别人的代码,不推荐)

 

分支暂存:

git stash     存储当前分支修改

git stash list 查看储存历史

git stash apply 回退最后一次存储

git stash drop  删除最后的存储

git stash pop 回退的同时并删除存储

 

多人协作:

git remote 查看远程库信息

git remote -v 显示更详细的信息

git remote add <shortName> <url> 添加一个新的远程 Git 仓库

git remote show origin 查看远程仓库origin的更多信息

git remote rename <name> <shortName> 修改一个远程仓库的简写名

 

拉取:

git pull 拉取分支并合并,如果有冲突,要先处理冲突

(git clone 自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支(或不管是什么名字的默认分支))

git fetch [remote-name] 数据拉取到本地仓库(不会自动合并或修改当前的工作)

 

推送:

git push origin 将当前分支推送到origin主机的对应分支

git push origin xxx  推送到远端xxx分支

git push -f 本地库HEAD指向的版本比远程库的要旧, 强制推

 

标签:

tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。

git tag <name>  

git tag  <name> <commit id>

git tag -a <tagname>  -m "备注说明" <commit id>

标签不是按时间顺序列出,而是按字母排序的。

git show <tagname>查看标签信息:

 

操作标签:

git tag -d <tagname>  删除标签

git push origin --tags  一次性推送全部尚未推送到远程的本地标签

git tag -d <tagname> 如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:

git push origin :refs/tags/<tagname> 然后,从远程删除。删除命令也是push,但是格式如下:

 

rebase:

git rebase -i HEAD~3 合并commit记录

pick:保留该commit(缩写:p)

  reword:保留该commit,但我需要修改该commit的注释(缩写:r)

  edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)

  squash:将该commit和前一个commit合并(缩写:s)

  fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)

  exec:执行shell命令(缩写:x)

  drop:我要丢弃该commit(缩写:d)

 

.gitignore文件(略)

git add -f  <file name> 强制添加到git  被忽略的文件无法添加时使用强制添加

git check-ignore -v <file name> 查看哪一条忽略规则 忽略了文件

 

场景:

一:先有本地库,后有远程库

git remote add origin https://git.oschina.net/zx1323/GitTest.git  关联远程库,成功后可以在.git./config 文件内查看

git remote remove origin 移除关联的远端库地址

关联后,使用命令

git push -u origin master  第一次推送master分支的所有内容;

git push origin master  将本地master分支的最新修改推送到远端库

 

二:克隆远程库到本地

git clone git@git.oschina.net:zx1323/TestUtils.git 克隆远程库到本地

 

=============================================================================================

免密登录,添加公钥到git仓库

ssh-keygen -t rsa -C "youremail@example.com" 构建ssh Key   3-4下回车键 

根据回返回路径   cat查看密钥   id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

ctrl+insert复制密钥 ssh-rsa...@xx.com http://git.oschina.net/keys  添加公钥地址到码云 官方的教程:http://git.mydoc.io/?t=154712
ssh -T git@git.oschina.net 测试公钥是否添加到oschina

=============================================================================================

因此:多人协作工作模式一般是这样的:

  1. 首先,可以用git push origin branch_name推送自己的修改.
  2. 如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull试图合并。
  3. 如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch_name推送。

=============================================================================================
配置别名
git config --global  alias.st status 设置命令简写  查看状态
git config --global alias.unstage 'reset HEAD' 暂存区修改撤销 回到上一个版本
git config --global alias.co checkout 切换分支 或工作取放弃修改
git config --global alias.ci commit 提交
git config --global alias.br branch 查看分支
git confit --global alias.last 'log -1' 最后一条日志
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"
--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。
配置文件
配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
每个仓库的Git配置文件都放在.git/config文件中:
别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。


=============================================================================================
eclipse 中切换分支

Team-Switch to-New branch-select   选择所需分支  完成即可

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值