通常我们在提交之后会想要修改,当然我们是在文件上直接修改,但是修改后在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这里的撤销修改仅仅是对于没有提交的撤销(git commit -m ''),在下面会讲到如何撤销提交后的撤销
当我们修改后会出现上面的提示,前面已经贴过了,这里就不再贴代码了,根据提示,我们可以git checkout -- file.txt来丢弃工作区的修改,之后就可以看见先前的修改已经不见了
当我们修改文件后并且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 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需要马上修改,但是此时这个分支上的东西还需要很长时间才能完成,这应该怎么办呢?难道要放弃当前分支上的修改吗?当然不是了,幸好,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 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分支