git安装与操作指令记录

git安装过程:

windows安装

(1)首先安装git

安装好后,打开git bash

$ git config --global user.name "Your Name"

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

(2)创建本地版本库

$ mkdir learngit

$ cd learngit

$ pwd

/Users/michael/learngit

通过git init命令把这个目录变成Git可以管理的仓库

$ git init

Initialized empty Git repository in /Users/michael/learngit/.git/

(3)远程仓库

创建远程仓库learngit.git

创建SSH Key

$ ssh-keygen -t rsa -C "youremail@example.com"

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

陆GitHub,打开“Account settings”,“SSH Keys”页面

点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容

$ git remote add origin git@github.com:michaelliao/learngit.git

上面的michaelliao替换成你自己的GitHub账户名

git add

git commit

$ git push -u origin master

按提示输入yes

 

1、简单操作

1.1 git add **.txt

git commit -m "**"

git status//查看工作区状态

git reset --hard 3628164//回退

git reset --hard HEAD^//回退

cat **.txt//查看内容

1.2 git diff

git diff  

(1)当暂存区中没有文件时,git diff比较的是,工作区中的文件与上次提交到版本库中的文件。

(2)当暂存区中有文件时,git diff则比较的是,当前工作区中的文件与暂存区中的文件

git diff --cached显示索引区与git仓库之间的差异

git diff HEAD   显示工作目录与git仓库之间的差异

        git diff HEAD^  比较上次提交

        git diff HEAD~2 比较上2次提交

git difftool    使用图形工具显示文件之间的差异

git diff --stat 列出文件

git diff -- filename    只对比给定的文件

历史提交对比:

$ git diff commit       将所指定的某次提交与当前工作目录进行对比。

$ git diff commit1 commit2 将2次提交的内容进行对比

等价于

$ git diff commit1..commit2 如果省略任意一个commit,默认将使用HEAD代替

commit可以是简写的commit哈希值,也可是是HEAD。其中HEAD代表最后一次提交,HEAD^代表最后一次提交的父提交,HEAD~1>等价于HEAD^, HEAD~2为倒数第二次提交,以此类推。

git diff HEAD -- **.txt//查看工作区和版本库里面最新版本的区别

1.3 git log

git log//查看详细修改记录(commit)

git log --pretty=oneline//查看简约修改记录

git log --graph//分支合并图

git log --graph --pretty=oneline --abbrev-commit

查看分支关系

git log --graph --decorate --oneline --simplify-by-decoration --all

git reflog//命令记录

git config --global alias.st status//起别名status->st

--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用

 

2、详解add

git add -A, git add . 和git add -u在功能上看似很相近,但还是存在一点差别

git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。

git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)

git add -A :是上面两个功能的合集(git add --all的缩写)

 

3、添加远程

git remote add origin git@gitub.com:michaelliao/learngit.git//添加远程库

git push -u origin master//首次推送

git push origin master//推送

git clone https://github.com/wujing1714/gitskills.git //从远程库克隆

git checkout -b dev origin/dev //创建远程origin的dev分支到本地

git push origin dev//推送到远程origin的dev分支

多人协作的工作模式通常是这样:

首先,可以试图用git push origin branch-name推送自己的修改;

如果推送失败,则因为远程分支比你的本地更新,需要先用git pull更新本地;

如果有冲突,则解决冲突,并在本地提交;

没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”,

则说明本地分支和远程分支的链接关系没有创建,

用命令git branch --set-upstream branch-name origin/branch-name。

 

4、创建切换分支

git checkout -b dev//创建分支dev并切换

相当于

$git branch dev

$git checkout dev这两条

git branch -d <name>//删除分支

删除分支:$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项

$ git merge [name] ----将名称为[name]的分支与当前分支合并

$ git push origin [name]创建远程分支(本地分支push到远程)

$ git push origin :[name]删除远程分支

 

5、删除工作区,已提交暂存区、版本库文件

仅仅删除暂存区里的文件

git rm --cache 文件名

删除暂存区和工作区的文件

git rm -f 文件名

删除错误提交的commit

//仅仅只是撤销已提交的版本库,不会修改暂存区和工作区

git reset --soft 版本库ID

//仅仅只是撤销已提交的版本库和暂存区,不会修改工作区

git reset --mixed 版本库ID

//彻底将工作区、暂存区和版本库记录恢复到指定的版本库

git reset --hard 版本库ID

git checkout -- readme.txt//把readme.txt文件在工作区的修改全部撤销

 

6、stash操作

git stash//暂存任务

git stash list//查看暂存任务

返回任务的两种方法

(1)git stash apply

git stash drop

(2)git stash pop

若暂存了多个任务

先git stash list查看暂存任务

再恢复指定的stash

git stash apply stash@{0}

 

7、tag操作

git tag <name>//用于新建一个标签,默认为HEAD,也可以指定一个commit id

git tag -a <tagname> -m "blablabla..."//可以指定标签信息;

git tag -s <tagname> -m "blablabla..."//可以用PGP签名标签

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

git tag -d v0.1//删除标签

git push origin v1.0//推送标签到远程

git push origin --tags//一次性推送标签到远程

git tag -d v0.9//标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除

git push origin :refs/tags/v0.9//从远程删除

 

8、merge

git merge --no-ff -m "merge with no-ff" dev//合并dev分支时,

加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,

能看出来曾经做过合并,默认情况下,Git执行"快进式合并"(fast-farward merge),

而fast forward合并就看不出来曾经做过合并。

 

9、git忽略已经被提交的文件, 远程的会被删除

git rm --cached logs/xx.log

git add -u

git commit -m "We really don't want Git to track this anymore!"

 

10、一个git工程除了默认的origin 仓库外,还可以为其添加一个新的远程仓库, 可以随意指定一个名字, 运行

$ git remote add new_repository_name git://github.com/paulboone/ticgit.git

问题描述: 当我们 在github上fork出一个项目后,如果原有的项目更新了,

怎样保持我们fork出来的项目和原有项目保持同步呢,并提交我们的代码呢?

10.1、首先添加你从github上fork的源仓库到本地的git工程:

$ git remote add source_repository_name [url]

10.2、 假设origin仓库和source_repository_name源仓库都有一个分支branch_name,

你在该分支上进行开发,将本地修改commit后,在每次Push前做如下操作,

即可实现和上游source_repository_name仓库同步:

(1)同步源仓库的信息到本地

$ git remote update source_repository_name

或者$ git fetch source_repository_name

(2)将源仓库的信息merge到本地分支:

$ git checkout branch_name

$ git rebase source_repository_name/branch_name

10.3、$ git push 将最新同步的代码和修改,提交到你的origin仓库

10.4、Github上提出Push Request即可,将你的origin仓库的所有修改提交到source_repository_name仓库

GitHub常用的开发协同流程为:将别人的仓库fork成自己的origin仓库 →

git clone origin仓库到本地 → 本地添加fork源仓库 →

工作前先git remote update下fork源保持代码较新 →

coding → push回自己 → github上提出Push Request即可

 

11、解决冲突

手动解决后,再次使用git add ,git commit,git push

 

12、rebase使用

本地

git checkout dev

git rebase master

远程

git remote update upstream //或者用git fetch upstream

git rebase upstream/master

若有冲突

git add -u

git rebase --continue

然后

git checkout master

git merge dev

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值