Open lovecn opened 9 years ago
git status -s 功能:用来比较,当前的工作目录和缓存区的状态 ??:该文件还没有被git进行追踪 A:当前工作目录同缓存文件相比,新增加的文件 M:当前目录同缓冲区相比,已经进行了改变(Modify) D: 当前目录同缓冲区相比,删除的文件 注意:git status 是以缓冲区中的内容为标准的,所有的AMD都是以缓冲区的内容为准,经过同缓冲区的对比,发现当前工作区进行了AMD等操作 git diff 功能:如果没有其他参数,git diff 会显示自从你上次提交快照之后尚未缓存的所有更改 注意:对比的参照点仍然是缓冲区中的内容,将当期那工作目录中的文件同缓冲区做对比 git diff --cached 功能:将缓冲区的内容同快照中的内容进行对比 git diff HEAD 功能:将当前工作目录中的文件,同快照中的内容进行对比 git commit -m '对本次提交的快照的说明' 功能:将缓冲区中的内容添形成一次快照(也就是打一个版本) git commit -am '对本次提交的说明' 功能:同git commit -m 的功能类似,但是,由于多了一个a参数。这样就有一个隐含的操作,将已经追踪的文件先进行自动提交(注意:是已经追踪到的文件)! git log : 功能:显示从最近到最远的提交日志 个人体会是,我们最想要的就是commmitid和对本次提交的说明 git reset --hard commitid 功能:回到指定的某个版本,注意,是连通当前的工作区一起回去,很可怕的一个命令。如果你并没有对当前的工作目录进行提交,而且还执行了这个操作,那么就杯具了,你上次提交后所有的更改内容就全部丢失而来,本人在这方面就犯了很大的错误!想想都是血泪啊! git reflog 功能:用来记录你的每一次命令,这样我们就可以看到所有的commitid了(而git log只能够用来查看当前版本的commitid以及以前提交版本的commitid) git checkout -- file 功能:将缓冲区或者快照中的指定文件恢复到当前的工作目录 注意:--是必须要写的,如果不写的话,就成为了分支的切换。 同时,我们应该明白,恢复的先后顺序。执行完改命令后,如果缓冲区中有该文件的话,那么工作目录就会恢复到缓冲区的样子!如果缓冲区没有文件的话,那么就会恢复到最新提交的版本上面! git reset HEAD file 功能:将缓冲区中的指定文件,回退到最新的一次commit版本。 这个命令还是很有用的,如果我们误操作了,并且进行了add,那么此时再用 git checkout --file 恢复工作区中的内容的话,就没有任何效果了!但是执行git reset HEAD file这个命令,就可以将最新一次的commit中的file文件拉回到缓冲区中,然后在通过git checkout -- file命令,恢复到工作区中! git branch 功能:展现当前的所有分支,前面带有 "*" 是所在分支 git branch 分支名 功能:创建一个新的分支 git checkout -b 分支名 功能:创建新分支,并切换到改分支上 git branch -d 分支名 功能:删除指定的分支(不可以删除当前所在分支) git checkout 分支名 功能:用于在不同的分支之间进行切换 注意:由于版本的不同,在操作上可能有所不同!在某些版本上必须先进行git add , commit 之后,才能进行分支的切换!(1.8.3之前的貌似都需要提交才行),而有的分支则不需要进行此操作! git merge 分支名 功能:将指定的分支合并到当前的分支 关于分支的合并我想说一下,自己的理解,个人认为所谓合并,其实是对所有修改的合并!这里举个例子说明会更好一些: A作家写初步完成了一篇长篇小说的初稿,但是呢仍然需要对这篇长篇小说进行修修改改!处于对质量的严格要求!此时A作家找到了B作家,希望B作家提出宝贵的意见,让他对这篇小说也进行修改!等修改的差不多了,A作家,就让B作家把他的修改内容发给A作家,A作家再将B作家的修改添加到自己既有的修改上面!(--这应该就是合并) 如果A作家的修改的内容,B作家也进行了修改,那么就有A作家去决定改要谁的修改!(--这就是解决冲突) git记住密码 建个文件,windows命名为_netrc,linux或mac命名.netrc machine git.abc1.com login username password password machine git.abc2.com login username password password username是你的用户名,password是你的密码, machine是你的git网站域名。 可以添加多个。 然后把这个文件放在个人目录下, windows在C:\Users\XXXXXX目录下, linux或mac在 ~/ 下 命令: ssh-copy-id 密钥公共id 代码服务器的地址 例如: ssh-copy-id -i ~/.ssh/id_rsa.pub code@192.168.0.6 注: 前提已经生成过密钥,生成密钥的命令: ssh-keygen -t rsa -C 邮箱地址 例如: ssh-keygen -t rsa -C "lisi@public.cn" 假设你有3个commit如下: commit 3 commit 2 commit 1 其中最后一次提交commit 3是错误的,那么可以执行: git reset --hard HEAD~1 你会发现,HEAD is now at commit 2。 然后再使用git push --force将本次变更强行推送至服务器。这样在服务器上的最后一次错误提交也彻底消失了。 值得注意的是,这类操作比较比较危险,例如:在你的commit 3之后别人又提交了新的commit 4,那在你强制推送之后,那位仁兄的commit 4也跟着一起消失了。 git_Windows_MinGW命令行如何复制粘贴? 1,选中 要 编辑 的 2,在 标题栏 -> 右键 -> 编辑 -> 复制/粘贴 还有一种方式 在标题栏 -> 右键 -> 属性 -> 快速编辑模式勾上。 然后就能够左键选中,右键复制,右键粘贴 Git Bash,有如下命令可以做到复制: clip.exe < '待复制的文件' 例如: clip.exe < ~/.ssh/id_rsa.pub 这样,你的ssh public key就复制到粘贴板里了 使用shift + insert应该是可以粘贴的,至于复制,应该可以配置为选中即复制。 另外在推荐一个windows下的命令神器:http://conemu.github.io/ -- tab标签,各种快捷键,还有各种配色很全很方便 -- 更重要地是,你就可以使用你熟悉的Ctrl+C/V了 分支和标签就是简单的文件(基本上是这样),包含指向该提交的SHA-1哈希值 所有的分支指针都保存在.git/refs/heads里,HEAD在.git/HEAD里,而标签保存在.git/refs/tags git checkout -b myfeature origin/myfeature 在远端服务器上删除一个分支(注意分支名前面的冒号) git push origin :twitter-experiment 查看本地分支和远端分支的差异: $ git diff master..john/master git branch -m twitter-experiment $ git branch -m feature132 twitter-experiment 如果你只指定了一个分支参数,就会重命名当前分支 $ git stash # 做点其他事情... $ git stash pop 许多人建议使用git stash apply来代替pop,不过如果这样做的话最后会遗留一个很长的储藏列表。而“pop”会在全部加载后自动从堆栈中移除。 查看每次提交的具体改动$ git log -p 找特定提交者git log --author=Andy git log --since=2.months.ago --until=1.day.ago --author=andy -S "something" --all-match git log origin/master..new # [old]..[new] - 所有你还没有推送的提交 轻松地取消改动: $ git reset HEAD lib/foo.rb git commit --amend 这会取消最后一次提交git checkout --lib/foo.rb 找出来谁改动了某个文件里的某行代码会很有用 git gui blame FILE git count-objects -v Git 2.x 默认的是 simple,意味着执行 git push 没有指定分支时,只有当前分支会被 push 到你使用 git pull 获取的代码。 而对于 simple ,请输入:git config --global push.default simple 设置sshkey后还要用户密码 编辑项目目录下的.git/config文件 找到: [remote "origin"] url =https://github.com/hit9/hit9.github.com.git fetch = +refs/heads/*:refs/remotes/origin/* 把url处改成ssh地址: [remote "origin"] url =git@github.com:hit9/hit9.github.com.git fetch = +refs/heads/*:refs/remotes/origin/* url是 https的时候会采用用户名认证. 是ssh地址的时候才会采用ssh认证 多个 github 账号,怎样配置对应的 SSH key 使用 ssh config(ssh_config Recipes). 在 .ssh 目录下新建一个 config 文件,配置对应不同 Host 使用不同的 key. 例如: Host gitcafe.xxx HostName gitcafe.com User git IdentityFile ~/.ssh/id_rsa_gitcafe_xxx Host gitcafe.yyy HostName gitcafe.com User git IdentityFile ~/.ssh/id_rsa_gitcafe_yyy Host github.xxx HostName github.com IdentityFile ~/.ssh/id_rsa_github_xxx # 此行是代理配置,请无视 ProxyCommand ~/.ssh/socksproxywrapper.sh %h %p 比如 id_rsa_github_xxx 是你在 github 上 xxx 用户的 key, 就可以使用 git clone git@github.xxx:xxx/project.git 这样的方式来拉取 github 上的项目。
hexo博客http://zipperary.com/2013/05/28/hexo-guide-1/
http://info.9iphp.com/25-git-advance-skills/ 25个 Git 进阶技巧
Git 参考手册http://itmyhome.com/git/inspect.html