git常用操作
第一次连接远程仓库的配置
配置user.name 和user.email
git config --global user.name "name"
设置你的用户名
git config --global user.email "emil"
设置用户的email账号
生成密钥
ssh-keygen -t rsa -C "your email"
其中填的是你的注册的github
的账号,输入之后如果不需要输入密码的话,连续输入三个回车即可,最后在你的在终端输入 cd ~/.ssh 进入到你的文件下可以看到有两个文件id_rsa
和id_rsa.pub
,最后复制你的id_rsa.pub
中的内容到github
中的账号中即可
ssh -T git@github.com
如果上面的步骤已经完成了,那么就是验证是否完成了,输入上述语句,如果出现信息,那么证明说明你已经成功了
管理修改
通常我们在提交之后会想要修改,当然我们是在文件上直接修改,但是修改后在
git
上输入git status
查看此时的工作区的状态,你会发现出现了出现了如下的语句:
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
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: file.txt
no changes added to commit (use "git add" and/or "git commit -a")
从上面的提示可以看出我们有如下方案:
首先执行->
git add file.txt
,然后重新提交git commit -m 'modified file.txt
撤销修改(没有提交的[commit
])
这里的撤销修改仅仅是对于没有提交的撤销(
git commit -m ''
),在下面会讲到如何撤销提交后的撤销
未git add
当我们修改后会出现上面的提示,前面已经贴过了,这里就不再贴代码了,根据提示,我们可以
git checkout -- file.txt
来丢弃工作区的修改,之后就可以看见先前的修改已经不见了
已经git add
当我们修改文件后并且
git add
添加到暂存区了,那么查看状态git status
,出现的提示如下
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: file.txt
根据上面提示的方法:输入
git reset HEAD file.txt
,可以看到文件回到未git add
的状态了,这时如果你想要丢弃修改,使用git checkout -- file.txt
,之后就可以看到你的修改已经不见了
删除文件
其实删除也是一种修改操作,我们在文件管理器中直接使用
rm
删除文件,这时输入git status
可以看到如下的提示:
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: file.txt
no changes added to commit (use "git add" and/or "git commit -a")
PS G:\file> git checkout -- file.txt
如果你不想删除了,想要恢复原来的文件,使用
git checkout -- file.txt
这个命令可以让撤销修改,也可以撤销删除,起到一键还原的作用如果你想要继续删除,那么有两种方法:
first:
git add file.txt
,second:git commit -m ''
first:
git rm file.txt
,second:git commit -m ''
注意:
git rm file
可以用来删除提交到版本库中的文件,一般删除要执行以下命令:git rm file.txt
,git commit -m 'delete'
,注意在git commit
之前还是可以取消删除的,使用git checkout -- file.txt
,可以一键取消删除
创建与合并分支
常用命令:
git checkout -b dev
创建并且切换到dev
分支
git checkout dev
切换到dev
分支
git branch
查看所有的分支,带有*
的是当前所处的分支
git branch -d dev
删除dev
分支,一般在合并之后删除
git branch -D dev
:强制删除分支,一般在没有合并就删除分支会出现不能删除,这是就要使用强制删除这个分支的命令
git merge dev
将dev
分支合并到当前分支,使用到Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。
git merge --no-ff -m "merge with no-ff" dev
强制禁用Fast forward
模式,Git
就会在merge
时生成一个新的commit
,这样,从分支历史上就可以看出分支信息。
git log --graph --pretty=oneline --abbrev-commit
查看分支历史
创建合并
首先我们创建一个
dev
分支,使用命令:git checkout -b dev
(创建一个dev
分支,并且切换到dev
分支上),我们可以使用git branch
查看所有的分支现在在改变之前
master
分支上的file.txt
文件内容,之后git add file.txt
,并且提交到版本库中了(git commit -m 'file.txt'
),此时使用git checkout master
切换到master
分支上,查看file.txt
的文件内容,可以看到里面的内容并没有改变,由此可知两个分支是独立的,如果你在一个分之上创建了文件并且提交到版本库中了,切换到另外一个分支上,此时可以发现原来创建的文件不见了,因为那是另外一个分支的文件,当然我们可以合并分支,使用git merge dev
,这两个命令将dev
分支合并到当前分支
Bug分支管理
如果正在一个分支上工作,另外一个分支上的程序有一个Bug需要马上修改,但是此时这个分支上的东西还需要很长时间才能完成,这应该怎么办呢?难道要放弃当前分支上的修改吗?当然不是了,幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作,具体步骤如下:
git stash 将当前的工作状态暂时存储在stash中,输出如下信息
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge
此时可以使用
git status
查看当前的分支上的状态,可以知道当前的的工作区就是干净的,因此可以放心的修复另外一个分支上的的Bug
了
git checkout master
切换分支,修复Bug
git checkout dev
修复好Bug继续回到上一个分支干活
git stash list
可以看到工作现场还在,输出如下信息:
stash@{0}: WIP on dev: 6224937 add merge
如果有多个修改的内容,这里的信息肯定不止一条
git stash apply
:恢复修改,但是这只是恢复stash
的内容并不会删除,这里建议使用git stash pop
既恢复了又删除了stash
中内容,注意这里只能恢复一条数据,此时使用git status
查看状态,可以看到已经出现修改的内容了
git stash list
:此时查看当前stash
中的内容可以看到已经什么都没了,当然这只是清除一条,如果本来有多个,那么还是会有其他内容的
常用命令
git stash
将当前的分支上的工作暂存到stash
中
git stash list
列出stash
中的所有暂存的内容
git stash pop
恢复并且删除stash中的内容
git stash apply
恢复但是步删除stash
中的内容
远程仓库的操作
常用的命令
git remote -v
查看远程仓库的详细信息
git remote add remote-name URL
添加远程仓库
git remote rename origin pb
将远程仓库的origin改为pb,此时使用git remote 查看可以知道这里已经没有origin了,变成了pb
git remote rm origin
将远程仓库origin删除
git push origin master
将内容提交到远程仓库origin的master上,当然这里亦可以使用其他的分支
git clone URL
克隆一个远程仓库,这里的URL是远程仓库的地址
git pull origin
将远程仓库中更新的数据拉到本地
git checkout -b branch-name origin/branch-name
在本地创建和远程仓库对应的分支,最好分支的名字相同
git push origin branch-name
推送到远程仓库的分支
注意
同一个文件夹中可以添加很多远程仓库,不过可以在提交的时候需要指定远程仓库的名字,比如在你的文件夹下有origin和pb两个远程仓库,可以使用git remote -v查看详细的信息,此时你在版本库中已经有想要推送的文件了,那么使用git push origin master就可以指定推送到origin远程仓库中
实例
假如你新建一个文件夹,此时要在里面添加远程仓库,具体实现如下:
git clone URL
将一个仓库克隆来的同时也具有推送的权限了,这时就可以使用git remote add origin URL
来添加远程仓库了如果没有使用
clone
的方法创建一个版本库,那么先git init
然后git remote add origin URL
添加远程仓库,之后就是将本地仓库和远程仓库对应了,使用git pull origin master
来拉取远程仓库中内容,当然这也可以分两步,使用如下:
git fetch origin master
这是将远程仓库中的文件拉取到本地,但是没有与本地的master
合并,因此本地的master
分支不能追踪远程仓库中的分支
git merge origin/master
将远程仓库和本地的master
分支合并,那么就可以使用本地的master
分支追踪远程仓库了,这就完成了
无论
clone
还是pull
都只是拉取远程的master
分支,但是一般远程仓库中还有其他的分支,那么怎么办呢?拉取远程仓库的次分支步骤如下:
git checkout -b dev origin/dev
拉去远程仓库中的dev
仓库到本地的dev
分支
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。