git使用笔记
==================================================
//建立目录
mkdir paper-slider
cd paper-slider
//初始化 git
git init
//设置 git 用户名 邮箱地址(通常应该跟github注册邮箱一致)
http://gitref.org/zh/
//全局设置
git config --global user.name "yourname"
git config --global user.email "your-email-address"
//也可以给当前repo 单独设置
git config user.name "yourname"
git config user.email "your-email-address"
git add readme.md
git commit -m 'init'
git remote add origin https://github.com/zxdong262/paper-slider.git
git push -u origin master
git add -A
stages All
-
git add .
stages new and modified, without deleted -
-
git add -u
stages modified and deleted, without new
//然后输入用户名密码
git diff #尚未缓存的改动
$ git status -s查看你的文件在工作目录与缓存的状态
====================================================
tag管理(发行版本):
如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。 该 tag 命令基本上会给该特殊提交打上永久的书签,从而使你在将来能够用它与其他提交比较。
$ git tag -a v1.0
$ git push –-tags共享标签
删除tag这么用
git push origin --delete tag <tagname>
========================================================
使用 git fetch 更新你的项目,使用 git push 分享你的改动。 你可以用 git remote 管理你的远程仓库。
git remote add 为你的项目添加一个新的远端仓库
如果你希望分享一个本地创建的仓库,或者你想要获取别人的仓库中的贡献 —— 如果你想要以任何方式与一个新仓库沟通,最简单的方式通常就是把它添加为一个远端仓库。 执行 git remote add [alias] [url] 就可以。 此命令将 [url] 以 [alias] 的别名添加为本地的远端仓库。
git pull 从远端仓库提取数据并尝试合并到当前分支
git pull --rebase,这里表示把你的本地当前分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把本地当前分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到本地当前分支上。
===============================
git log 过滤你的提交历史记录
git diff
最后,要查看两个提交快照的绝对改动,你可以用 git diff 命令。 这在两个主要情况中广为使用 —— 查看两个分支彼此之间的差值,和查看自发布或者某个旧历史点之后都有啥变了。让我们看看这俩情况
$ git diff v0.9
===========分支=================
git branch (branchname) 来创建分支, 使用 git checkout (branchname) 命令切换到该分支,在该分支的上下文环境中, 提交快照等,之后可以很容易地来回切换。
git branch -d (branchname) 删除分支
一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。 你可以使用 git merge 命令将任何分支合并到当前分支中去。 我们那上例中的“removals”分支为例。假设我们创建了一个分支,移除了一些文件,并将它提交到该分支, 其实该分支是与我们的主分支(也就是“master”)独立开来的。 要想将这些移除操作包含在主分支中,你可以将“removals”分支合并回去。
git checkout -b 创建并切换到分支
删除远程分支
=========================================
git push origin :develop
还原为上一个提交的版本
git rebase -i HEAD~2
git push origin +master
将本地的状态回退到和远程的一样 git reset –hard origin/master ================================================
git clone只能clone远程库的master分支,无法clone所有分支,解决办法如下:
1. 找一个干净目录,假设是git_work 2. cd git_work 3. git clone http://myrepo.xxx.com/project/.git ,这样在git_work目录下得到一个project子目录 4. cd project 5. git branch -a,列出所有分支名称如下: remotes/origin/dev remotes/origin/release 6. git checkout -b dev origin/dev,作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支 7. git checkout -b release origin/release,作用参见上一步解释 8. git checkout dev,切换回dev分支,并开始开发。 ============================================= git stash保存工作现场 1.使用gitstash保存当前的工作现场,那么就可以切换到其他分支进行工作,或者在当前分支上完成其他紧急的工作,比如修订一个bug测试提交。 2.如果一个使用了一个git stash,切换到一个分支,且在该分支上的工作未完成也需要保存它的工作现场。再使用gitstash。那么stash 队列中就有了两个工作现场。 3.可以使用git stash list。查看stash队列。 4.如果在一个分支上想要恢复某一个工作现场怎么办:先用git stashlist查看stash队列。确定要恢复哪个工作现场到当前分支。然后用git stash pop stash@{num}。num就是你要恢复的工作现场的编号。 5.如果想要清空stash队列则使用git stash clear。 6.同时注意使用git stashpop命令是恢复stash队列中的stash@{0}即最上层的那个工作现场。而且使用pop命令恢复的工作现场,其对应的stash在队列中删除。使用git stash apply stash@{num}方法除了不在stash队列删除外其他和git stashpop 完全一样。
=============================================== - 撤销操作
修改最后一次提交
有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用
--amend
选项重新提交:$ git commit --amend
此命令将使用当前的暂存区域快照提交。如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会重新编辑提交说明,但将要提交的文件快照和之前的一样。
启动文本编辑器后,会看到上次提交时的说明,编辑它确认没问题后保存退出,就会使用新的提交说明覆盖刚才失误的提交。
如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行
--amend
提交:$ git commit -m 'initial commit' $ git add forgotten_file $ git commit --amend
上面的三条命令最终只是产生一个提交,第二个提交命令修正了第一个的提交内容。
取消已经暂存的文件
接下来的两个小节将演示如何取消暂存区域中的文件,以及如何取消工作目录中已修改的文件。不用担心,查看文件状态的时候就提示了该如何撤消,所以不需要死记硬背。来看下面的例子,有两个修改过的文件,我们想要分开提交,但不小心用
git add .
全加到了暂存区域。该如何撤消暂存其中的一个文件呢?其实,git status
的命令输出已经告诉了我们该怎么做:$ git add . $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: README.txt modified: benchmarks.rb
就在 “Changes to be committed” 下面,括号中有提示,可以使用
git reset HEAD <file>...
的方式取消暂存。好吧,我们来试试取消暂存 benchmarks.rb 文件:$ git reset HEAD benchmarks.rb Unstaged changes after reset: M benchmarks.rb $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: README.txt 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: benchmarks.rb
这条命令看起来有些古怪,先别管,能用就行。现在 benchmarks.rb 文件又回到了之前已修改未暂存的状态。
取消对文件的修改
如果觉得刚才对 benchmarks.rb 的修改完全没有必要,该如何取消修改,回到之前的状态(也就是修改之前的版本)呢?
git status
同样提示了具体的撤消方法,接着上面的例子,现在未暂存区域看起来像这样: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: benchmarks.rb
在第二个括号中,我们看到了抛弃文件修改的命令(至少在 Git 1.6.1 以及更高版本中会这样提示,如果你还在用老版本,我们强烈建议你升级,以获取最佳的用户体验),让我们试试看:
$ git checkout -- benchmarks.rb $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: README.txt
可以看到,该文件已经恢复到修改前的版本。你可能已经意识到了,这条命令有些危险,所有对文件的修改都没有了,因为我们刚刚把之前版本的文件复制过来重写了此文件。所以在用这条命令前,请务必确定真的不再需要保留刚才的修改。如果只是想回退版本,同时保留刚才的修改以便将来继续工作,可以用下章介绍的 stashing 和分支来处理,应该会更好些。