Git是比较优秀的分布式版本管理工具,这次学习了git的基本命令,现在作一些归纳总结,已备复习之用。
Git 认识
1. 在工作目录中修改文件。 --工作目录
2.暂存文件,将文件的快照放入暂存区域。 --暂存区域
3.提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。 --Git仓库
Git 配置
git config
的工具来设置控制 Git 外观和行为的配置变量,这些变量存在三个位置,相应参数会从相应的文件读写配置,每一级别覆盖上一级的配置,如.git目录的config覆盖上一级,具有最高优先级。/etc/gitconfig
文件, --system参数,如: git config --system xx~/.gitconfig
或 ~/.config/git/config
文件,--global参数,config
文件, 不加参数$ git config --global user.name "test" $ git config --global user.email test@example.com $ git config --global core.editor emacs $ git config --global core.editor "‘C:/Program Files/Sublime Text/sublime_text.exe‘ -w" #windows下配置编辑器sublime() $ git config --list #检查配置信息 $ git config username #检查git某一项配置
git help <verb> ##如 git help config git <verb> --help man git-<verb>
Git 基础
cd test #进入要初始化的目录test git init #初始化,test目录下生成.git文件夹 git add test.txt #跟踪test.txt文件,或者使用*通配符跟踪目录下所有文件 git commit -m ‘test‘ #提交快照,说明
2. 在指定目录下克隆远程仓库
git clone https://github.com/github/test_git.git #在当前目录下初始化.git文件夹,并新建test_git文件夹,拷贝远程仓库内容在test_git文件夹下 git clone https://github.com/github/test_git.git mould #同上,不过本地仓库名称改为mould
xxxx ~/documents/git/test (master) #括号里的master显示当前所处的分支 $ git status #检查目录下文件的状态 On branch master #所处分支 master Initial commit nothing to commit (create/copy files and use "git add" to track) #没有需要提交的,也没有未被跟踪的文件
新建文件test.txt后,再次检查状态
$ git status On branch master Initial commit Untracked files: #未跟踪的文件--test.txt,Git不会主动添加跟踪 (use "git add <file>..." to include in what will be committed) #提示用git add 跟踪 test.txt nothing added to commit but untracked files present (use "git add" to track)
跟踪新文件 git add test.txt 后,再次查看状态
$ git add test.txt warning: LF will be replaced by CRLF in test.txt. #正常情况不会有之下的提示, The file will have its original line endings in your working directory. #用vim新建的文件test.txt,linux和windows的换行符不同,具体可以搜下 $ git status On branch master Initial commit Changes to be committed: #修改将被提交,已处于暂存状态 (use "git rm --cached <file>..." to unstage) new file: test.txt #test.txt已被跟踪
再次修改test.txt文件,git status查看状态之后
$ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: test.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: test.txt
test.txt同时出现在暂存区和非暂存区,现在提交的会提交上一次git add的那个版本的修改,而不是提交此时文件的内容,就验证了git暂存区的存在
$ git status -s M edit.txt # M-修改了没放入暂存区 A new.txt # A-修改了放入暂存区 MM test.txt # 左边M表示修改了已放入暂存区颜色为绿色,右边M表示修改了没放入暂存区颜色为红色,与上边的M相同 ?? out.txt # ??表示没有被跟踪
GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore
文件列表,你可以在 https://github.com/github/gitignore
# no .a files *.a # but do track lib.a, even though you‘re ignoring .a files above !lib.a # only ignore the TODO file in the current directory, not subdir/TODO /TODO # ignore all files in the build/ directory build/ # ignore doc/notes.txt, but not doc/server/arch.txt doc/*.txt # ignore all .pdf files in the doc/ directory doc/**/*.pdf
git diff -- 不加参数,比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容
git diff --cached --
(git 1.61或更高版本允许使用git --staged) 查看已经暂存起来的变化
git commit -m ‘commit str
‘ -- 加上提交信息,方便查看每次提交,提交后的信息有哪个分支,和SHA-1校验
git commit -a -m ‘commit tracked‘ --加上 -a 参数,Git会自动把所有已跟踪过的文件暂存起来一并提交,没跟踪的文件不会被操作
rm text.txt -- 简单的从工作目录删除文件,但没有移除跟踪记录,git status会提示 changes no staged for commit,
git rm text.txt -- 从跟踪文件清单中移除,并连带从工作目录删除
git rm -f text.txt -- 如果文件删除之前已被跟踪,并且修改了,则需要用强制删除 -f,这样是防止误删,不能恢复
git rm --cached log/\*
.log -- 从git仓库中移除,亦从暂存区中移除,但还在工作目录,不跟踪,当把不需要跟踪的日志文件等add暂存区时,此方法很有用
git mv text.txt rename.txt -- 重命名操作
git log -p -2 -- -p显示每次提交的内容差异, -2 仅显示最近两次提交
git log --stat
-- 显示每次提交的简略的统计信息
git log --pretty=
oneline -- --pretty 使用其他格式显示历史提交信息,oneline,short,full,fuller 和 format(后跟指定格式)
git log --pretty=
format:"%h %s"
--graph -- --graph 显示 ASCII 图形表示的分支合并历史
git log --since=
2.weeks -- 指定时间之前的提交
撤销操作
git commit -m "bug" -- 提交完成后发现某个文件没添加,或提交信息写错
git add bug.txt -- 添加需要提交的文件
git commit --amend -- 参数--amend会重新提交,第二次提交覆盖第一次提交的结果,最终只有一次提交
git add * -- 暂存了所有文件
git reset HEAD test.txt -- 取消暂存的test.txt文件
注:调用时加上--hard选项可能会导致工作目录中所有当前进度丢失
注:这个命令会撤销你对此文件所有的修改,还原成上一次提交的样子,慎用,除非你真的想撤销,可以用Git 分支来处理,记住Git里提交的东西几乎都是可以恢复的
Git 远程仓库的使用
git remote -- 列出你指定的每一个远程服务器的简写,如果你克隆了自己的仓库,至少能看到origin,这是Git给你克隆的仓库默认的名字
git remote -v -- 选项-v,会显示远程仓库的简写与其对应的URL
git remote add mygit https://github.com/xxx/xxx.git --为远程仓库添加简写mygit
git fetch [remote-name] --会从最初克隆的服务器上拉取到本地仓库,并不会自动合并或修改你当前的工作
git pull [remotej-name] --会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支
git push origin master --会将master分支推送到origin服务器(clone时自动设置好的两个名字)
git remote show origin --会列出远程仓库的URL和跟踪分支的信息
git remote rename mygit newgit --把简写名mygit重命名为newgit
git remote rm newgit --移除远程仓库newgit
打标签
Git标签是给某一次特定的提交标识以示重要,如发布节点v1.0,使用两种类型的标签:
1.轻量标签 -- 只是一个特定提交的引用
2.附注标签 -- 存储在Git数据库中的完整对象,可以被校验。包括打标签者的名字,电邮,日期,和标签信息
git tag v1.0 -- 只需要提供标签的名字
git show v1.0 -- 轻量标签只会显示提交信息
git tag -a v1.1 -m ‘first tag‘ -- 选项-m 指定一条将会存储在标签中的信息,如果没有为附注标签指定一条信息,Git会运行编辑器要求你输入信息
git show v1.1 -- 附注标签会显示标签信息和提交信息
git tag --这个命令以字母顺序列出所有标签
git tag -l ‘v1.8.5*‘ --只列出1.8.5系列
git log --pretty=oneline --列出提交的历史记录
git tag -a v1.2 9fceb02 --为校验和为9fceb02的提交打标签
git push origin v1.0 --默认情况下,git push 不会推送标签到远程仓库,需要你显式的推送标签
git push origin --tag --选项--tag把所有不在远程仓库的标签全推送到远程仓库
git checkout -b version2 2.0 --Git并不能真的检出标签,想要工作目录与远程仓库中的特定标签完全一致,就可以在特定的标签上创建新的分支
Git 别名 -- 设置一个别名可以更快的输入
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage ‘reset HEAD --‘ --取消暂存
git config --global alias.last ‘log -1 HEAD‘ --最后一次提交
git config --global alias.visual ‘!gitk‘ --用Git协作工具执行外部命令,要在命令前加上‘!‘
Git基础部分,常用的总结完毕,下次将总结Git 杀手锏——分支branch
参考资料:1.Git官网教程,官网写的比较详细,推荐看,
2.廖雪峰的Git教程 简明,主要写了一些常用的命令。
原文:http://www.cnblogs.com/blusoul/p/4817167.html