欢迎转载,但请指明出处:https://www.cnblogs.com/zhizaixingzou/p/10241476.html
下面的内容来自《Git Pro》的阅读总结和实际操作。
git config --global user.name "John Doe"
git config --global user.email "johndoe@example.com"
安装完Git后应该做的第一件事就是设置用户名与邮件地址,后续每一个提交都会使用这些信息。
Git配置用于控制Git外观和行为。配置有3个层次,优先级由大到小依次为:无选项(项目级,记录于.git/config)、--global(用户级,记录于~/.gitconfig)、--system(系统级,记录于/etc/gitconfig)。
git config user.name
git config --list
查看Git配置。列出的项可能有重复,但只最后一个生效。另外,如果一个配置没有显式设置,不会列在清单中。
Git使用的默认文本编辑器,通常是Vim。
git config --help
git help config
查看Git命令的帮助信息,如这里是config。
git init
该命令在需要被Git管理的项目目录下执行。项目目录下会生成Git仓库,但项目目录下的文件还未被跟踪(前一快照和暂存区域中都不存在)。
git clone https://github.com/chenjw13097/ProgramBricks.git
在当前目录下创建一个ProgramBricks目录作为项目目录(如果想在本地重命名项目名称,可以在克隆时于URI后面指定,此时项目目录名就不再是默认的了),并为它初始化一个Git仓库,然后自动将其添加为远程仓库并以“origin” 为简写,接着从远程仓库抓取所有数据到仓库,设置本地分支master跟踪远程origin/master分支,同时合并origin/master分支内容到本地master分支,最后检出master分支最新版本的快照到工作目录。
git clone file://C:/Users/phewy/Desktop/test01
上面的test01是项目目录。克隆的结果是在当前目录下会出现一个项目目录test01。
git status
查看状态,会列出未跟踪文件、已修改文件、已暂存文件、因包含合并冲突而处于未合并状态的文件,也列出当前所在分支。
同一文件可以既是已修改状态,也是已暂存状态。此时git add,则将追加暂存已修改状态的部分。但提交后,只会出现一次变动,而不会分拆为两次变动。
git add client.java
如果文件未被跟踪,则跟踪指定的文件(如果给的是目录则递归跟踪目录下的所有文件),存入暂存区域。
如果文件处于已修改状态,则暂存。
如果文件合并时冲突,则解决冲突后标记文件为冲突已解决,接下来就可以提交。
综合几种情况,它可以理解为“添加内容到下一次提交中”。
*.[oa]
!lib.a
*.class
*.~
a/**/h
doc/*.docx
ppt/**/*.ppt
/file.txt
build/
.gitignore文件指定需要排除在Git管理之外的文件的模式。该文件在项目目录下创建,#开头的行是注释行,空行被忽略。
git diff
查看修改之后还没有暂存起来的变化部分
git diff --cached
git diff --staged
查看暂存起来的相对于上一次提交的变化部分
git commit
这种方式会启动文本编辑器以便输入本次提交的说明。
提交时记录的是放在暂存区域的快照。
每一次运行提交操作,都是对项目作一次快照。
git commit -m “initial project.”
此法提交则直接在后部分输入提交说明。
git commit -a -m 'added new benchmarks'
该命令可以直接提交已修改状态和已暂存状态的文件,但不包含未跟踪文件。
rm README.MD
git rm README.MD
git commit -m “deleted README.MD.”
这样以后,文件就不再被git管理,工作目录中也没有了它。
git add file03
git commit --amend [-m "update last commit"]
可修改多次,但都只是修改最后一条提交。
提交的时间还是上次提交的时间,amend只是覆盖了它的内容,包括新文件或新提交说明。
git rm --cached README
git commit -m “did not track README.MD again.”
这样以后,文件就不再被git管理,但工作目录尚有该文件,只是未跟踪。
如果在删除前文件为已修改或已暂存,则这些修改都保留在未跟踪文件中。
如果在删除前文件同时为已修改和已暂存,则必须“git rm -f --cached README”,这些修改合并后保留在未跟踪文件中。
git mv file01 file02
git commit -m “rename file01 to file02”
重命名文件。但此时文件的提交历史,完全从新开始。
git log
git log --pretty=format:"%h - %an : %s"
git log --since=2.weeks
查看提交历史。
使用它可以统计出开发者的相关操作。
git log --no-merges issue54..origin/master
显示origin/master相对于issue54没有合并部分的提交的日志信息。
git reset HEAD CONTRIBUTING.md
撤销暂存。
git checkout -- CONTRIBUTING.md
撤销修改。这个命令会删除修改,需要谨慎,因为它相当于undo,但却没有对应的redo。
git remote
列出已添加的所有远程仓库的简写。
如果是初始化仓库,则没有远程仓库。
如果你已经克隆了仓库,那么至少应该能看到 origin,它是克隆源仓库的默认名。
git remote -v
列出已添加的所有远程仓库的简写与其对应的URL。
我们可以轻松拉取其中任何一个远程仓库上其他用户的贡献。
git remote show origin
查看远程仓库的详细信息。
git remote add pb https://github.com/paulboone/ticgit
添加一个新的远程Git仓库,并制定简写。
添加的远程Git仓库当与本地仓库有共同的至少是第一个提交对象,也就是说来自同一个项目。
git fetch pb
从远程仓库抓取所有本地仓库还没有的数据。
执行完成后,你将会拥有那个远程仓库中所有分支的引用,如pb/master。
它并不会自动合并或修改你当前的工作。
git remote rename pb paul
重新命名远程仓库的简写,那些过去引用 pb/master 的现在会引用 paul/master。
git remote rm paul
移除远程仓库。
git tag v1.4-lw
创建轻量标签。
轻量标签本质上是将提交校验和存储到一个文件中,没有保存任何其他信息。
git tag -a v1.4 -m 'my version 1.4'
-a,表明这是一个附注标签。
-m 选项指定了标签说明信息,如果没有会启动编辑器提示输入。
附注标签是存储在Git数据库中的一个完整对象。包含打标签者的名字、电子邮件地址、日期时间、说明信息,也可以使用GPG签名与验证。
Git可以给历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布版本。
git tag -a v1.2 9fceb02
在提交补打标签,你需要在命令的末尾指定提交的校验和(或部分校验和)。
git tag
以字母顺序列出所有标签的名称。
git tag -l 'v1.8.5*'
模糊匹配得到标签的名称列表。
git show v1.4
查看标签详细信息。
git push origin v1.5
git push origin --tags
默认情况下,git push 命令并不会传送标签到远程仓库服务器上。
把指定标签或所有标签传送到远程仓库服务器上。
当其他人从仓库中克隆或拉取,他们也能得到你的那些标签。
git checkout -b develop v2.0
在特定标签上创建一个分支,并切换到该分支。
git config --global alias.ci commit
git config --global alias.unstage 'reset HEAD'
别名是原样替换的,不论是否有空格。
git branch testing
创建一个分支。该分支与当前分支指向同一个提交对象。
git checkout testing
切换分支。
如果当前有已修改或已暂存文件未提交,切换分支是切不了的。
工作目录中的文件全部变为该分支最后一个提交时的状态。
HEAD始终指向当前分支,可以看做是它的别名,切换分支就是使HEAD的值等于指定的分支。
git checkout -b iss53
创建并切换到目标分支。
git checkout master
git merge hotfix
将hotfix分支内容合并到master分支。
远程分支拉取后也可以直接合并到当前分支。
合并的另一种方法是使用变基,但分享了某个分支,对它执行变基操作就会有风险。考虑到除了提交历史更线性化些,它能完成的工作merge都能完成,所以笔者选择忘掉变基。
git branch -d hotfix
删除分支。
没有合并到其他分支的分支默认是删不掉的,需要使用-D选项强制删除它。
git branch
查看本地分支名称和当前分支。
git branch --merged
查看哪些分支已经合并到当前分支。
git branch --no-merged
查看所有包含未合并工作的分支。
git branch -vv
查看本地分支与远程分支的跟踪关系。
git push origin serverfix
git push origin serverfix:serverfix
git push origin refs/heads/serverfix:refs/heads/serverfix
推送本地分支到远程仓库上去,在远程仓库上的分支名也为serverfix,本地分支跟踪了它。
有写入权限,才能推送到远程仓库上。
下一次其他协作者从服务器上抓取数据时,他们会在本地生成一个远程分支origin/serverfix。可以运行 git merge origin/serverfix 将这些工作合并到当前所在的分支。
推送上去后,本地分支也自动成为远程分支的跟踪分支,下次推送时必须之前没有人推送过时,这条命令才能生效。如果有人推送过了,你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。
git push -u origin featureA
将本地分支featureA推送到远程origin上,新建分支名字也叫featureA,事先不存在。
git push -u origin featureB:featureBee
将本地分支featureB推送到远程origin上featureBee,featureB没有跟踪过featureBee。
git checkout -b serverfix origin/serverfix
git checkout --track origin/serverfix
在远程分支基础上建立跟踪分支,对应的远程分支称为上游分支。
git pull
在一个跟踪分支上,Git能自动地识别去哪个服务器上抓取数据,并合并到哪个分支。
git push origin --delete serverfix
删除远程分支。