本文转载自本人博客:https://dev.tail0r.com/git-learning-notes/
今天用了一天的时间学习了 git 的概念和使用流程,在这里整理一些常用命令:
git init 新建仓库 git add <file>添加到 stage(暂存区) git commit -m '<备注>'提交到 HEAD git status 查看状态 git diff <file>对比文件 git reset HEAD <file> unstage
git reset --hard <commit_id> 回到原来的版本 git log可以查看提交历史,以便确定要回退到哪个版本。 git reflog查看命令历史,以便确定要回到未来的哪个版本。 git checkout -- <file>直接丢弃工作区的修改,用 HEAD 中的文件替代 改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,第一步用命令git reset HEAD <file>,第二步参见上一条 git rm <file>同时在工作区和版本库删除文件,与 add 对应,需commit
git remote add origin git@github.com:ifrederic/learngit.git 关联远程仓库 git push -u origin master 初次 push git push origin <branch_name> 以后的提交 git clone git@github.com:michaelliao/gitskills.git 克隆远程仓库,默认只有 master 分支,如果要其他分支,需要: git checkout -b <branch_name> origin/<branch_name> git remote -v查看远程库信息
查看分支:git branch 创建分支:git branch <name> 切换分支:git checkout <name> 创建+切换分支:git checkout -b <name> 合并分支到当前分支:git merge <name> 删除分支:git branch -d <name> 查看分支合并图:git log --graph --pretty=oneline --abbrev-commit, 其中--pretty=oneline表示单行,--abbrev-commit表示缩写 hash 不使用Fast Forward模式的合并(好处:从分支历史上就可以看出分支信息,便于恢复到合并之前的版本)git merge --no-ff -m "merge with no-ff" dev
git stash储藏工作现场 git stash list查看“快照”列表 git stash pop 恢复并删除“快照” git stash apply stash@{0} 恢复但不删除“快照” git stash drop 删除快照
多人协作的工作模式通常是这样:
首先,可以试图用git push origin <branch-name>推送自己的修改;如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;如果合并有冲突,则解决冲突,并在本地提交;没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。这就是多人协作的工作模式,一旦熟悉了,就非常简单。
git tag查看所有标签 git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id:git tag <name> <commit id> git tag -a <tagname> -m "blablabla..."可以指定标签信息; git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
标签只存储在本地,不会自动推送到远程,以下是远程标签的操作: git push origin <tagname>可以推送一个本地标签; git push origin --tags可以推送全部未推送过的本地标签; git tag -d <tagname>可以删除一个本地标签; git push origin :refs/tags/<tagname>可以删除一个远程标签。
在GitHub上,可以任意Fork开源仓库;
自己拥有Fork后的仓库的读写权限;
可以推送pull request给官方仓库来贡献代码。
忽略某些文件时,需要编写.gitignore;.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore。例如这是 macOS 系统所需的.gitignore文件:
*.DS_Store .AppleDouble .LSOverride # Icon must end with two \r Icon # Thumbnails ._* # Files that might appear in the root of a volume .DocumentRevisions-V100 .fseventsd .Spotlight-V100 .TemporaryItems .Trashes .VolumeIcon.icns .com.apple.timemachine.donotpresent # Directories potentially created on remote AFP share .AppleDB .AppleDesktop Network Trash Folder Temporary Items .apdisk在这个设置中,我们将 unstage 的操作reset HEAD,设置了别名unstage。
git config --global alias.unstage 'reset HEAD'以后输入git unstage test.py就相当于执行git reset HEAD test.py了。另外:
git config --global alias.last 'log -1'这样,用git last就能显示最近一次的提交。甚至,还可以这样:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"至于有什么效果,就自己尝试吧:)
