本地操作
Git Book - https://git-scm.com/book/zh/
Git Book - https://git-scm.com/book/zh/v2
参考资料:http://git.oschina.net/progit/
参考资料:http://rogerdudler.github.io/git-guide/index.zh.html
参考资料:http://backlogtool.com/git-guide/cn/
参考资料:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/
http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
http://www.ruanyifeng.com/blog/2015/08/git-use-process.html
https://ourai.ws/posts/working-with-git-in-team/
https://wenku.baidu.com/view/e1430d1b7f1922791788e81e
以及极客学院的资料
--git安装依赖命令 sudo yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://github.com/git/git/archive/v2.8.0.tar.gz tar -zxvf git-v2.8.0.tar.gz cd git-v2.8.0 make prefix=/usr/local/git all make prefix=/usr/local/git install whereis git vim /etc/profile export PATH=$PATH:$JAVA_HOME/bin:/usr/local/git/bin:$CATALINA_HOME/bin:$MAVEN_HOME/bin:$NODE_HOME/bin:/usr/local/bin:$RUBY_HOME/bin
source /etc/profile git --version git config --global user.name porters git config --global user.email 1906846616@qq.com
git config --global core.autocrlf false //忽略win和linux的换行符转换 git config --global core.quotepath off //避免中文乱码 git config --global gui.encoding utf-8 ssh-keygen -t rsa -C "1906846616@qq.com" --一路回车 eval `ssh-agent` ssh-add ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub ...
mac下安装:cd ~
which -a git // 查看mac下安装了哪些版本的gitgit --version // 查看git的版本
git-scm.som // 从官网下载安装包,并安装
vim .bash_profile // linux下不同好像是.bash_rc export PATH=/usr/local/git/bin:$PATHsource .bash_profile
自动完成
github.com/git/git //从github下载源码zip,解压cp contrib/completion/git-completion.bash ~/cp contrib/completion/git-prompt.sh ~/
git --version //再次查看
git config --help //q退
git help config //q退
man git-config //mac下q退出
win下安装:git config //tab键会自动补全, 再按一下会有提示可能的282个命令git config -- //tab键会提示参数git config --global --unset-all user.name //移除所有user.name行
--git增删改查git config --global user.name "zhipengliu"git config --global user.email "git@zhipengliu.com"git config --global user.name pengliu //修改git config --global --add user.name pengliu //追加git config --global user.name git config --get user.name git config user.name git config --list --global //查看所有git config --global --unset user.name pengliu git config --global --unset user.name //移除所有user.naem行--git的子命令以及参数 其别名git config --global alias.co checkoutgit config --global alias.br branchgit config --global alias.st statusgit config --global alias.ci commitgit config --global alias.lol "log --oneline"
git config --global alias.lol "log --oneline --decorate --graph --all --date-order
"
--git中的四种对象1 blob2 tree3 commit4 tag
1. git init 2. git clonegit init git_non_bare_repo //初始化一个git仓库git init --bare git_bare_repo //创建裸仓库git clone git_brare_repo/ git_clone_repo //从裸仓库克隆一个git仓库(也可以克隆一个远程地址)
git仓库有三个工作区域:working directory: 工作区 (也就是我们日常编写代码存放的地方)维护着一个树形结构staging area: 暂存区(相当于工作区与历史提交中间的一个缓存, 他代表的是你需要提交的一个工作的状态,维护的是一个虚拟的树形结构)history repository: 历史仓库(他是一个commit指向的一个树形结构)
Changes not staged for commit 未提交的更改changes to be committed 已暂存Untracked files 跟踪文件Unstaged changes after reset 复位后未改变
1. git add : 添加到暂存区git add -A git add .
2. git commit : 提交到历史中3. git status : 查看工作区与暂存区之间的区别, 确保我们提交时我们所需要的git status -s4. git rm : git rm --cached a可以从暂存区删除我们不需要的a文件5. git mv : 底层git帮你做了在工作区对文件重命名, 删除暂存区的文件, 再把重命名的文件添加到暂存区.gitignore : 确保工作区不希望添加到暂存区,或历史中的文件不被添加进去
1. git branch // 创建分支(查看分支git branch)(删除非当前分支git branch -d 分支名)2. git tag // 给一个固定的commit做标记,
git tag -a "INITIAL_COMMIT" f77ce01(-a给commit是f77ce01的打一个含附注的(annotated)标签)
git push origin v1.5 git push origin --tags3. git checkout // 怎么在分支之间进行切换,
还可以git checkout a //此时还原a文件到工作区
还可以git checkout -b fix_v0 //相当于git checkout和git branch的组合4. git stash // 怎么样在切换分支之前保存本地的修改
git stash save -a "stash1" //在返回到的最近指向的commit点,并把未提交的修改stash起来,
-a暂存区的内容也stash起来,同时把这些操作记录保存一个临时的地方
git stash list 查看之前保存的stash
git stash pop --index stash@{0}
git stash apply --index stash@{0}
git stash drop stash@{0}
git stash clear
5. git merge // 怎么合并分支
git merge --abort //内容有冲突,放弃这次merge的合并
1. git show // 可以跟一个代表commit的对象2. git log3. git diff
git show 6fa315agit show master git show HEAD
git show HEAD~ git show HEAD~~ git show HEAD~2git show master~ git show master~~ git show master~2
git show HEAD^ git show HEAD^^ git show HEAD^2git show master^ git show master^^ git show master^2
git show master^2 //除了使用hash格式,只有master^2格式才能查看第二幅提交的最后commit(实验获得), 其他格式只是在当前的线性分支依次递减向前推移查看
git show --oneline master^2 //hash 提交者 提交时间缩成了一行git show --stat master^2 //提交的统计信息git show --oneline --stat master^2 //提交的commit信息, 和统计信息git show --format=%T master^2 //此commit指向的tree对象
git loggit log -pgit log --statgit log --onelinegit log --oneline --decorate --graph --all
git diff HEAD~2 -- master.txtgit diff --cached HEAD~2git diff HEAD HEAD~2git diff HEAD HEAD~2 -- master.txtgit diff --color-wordsgit diff --word-diff
1. git checkout //还原工作区2. git reset //还原暂存区3. git clean //git还没有跟踪的文件, git clean清除4. git revert //产生新的提交覆盖原来的之间的提交,达到撤销以前的一个commit提交的目的
命令git checkout -- readme.txt意思就是: 用此刻head上的已提交的内容回到这个文件最近一次git commit或git add时的状态。命令git reset HEAD file意思就是: 用此刻head上的已提交的内容覆盖暂存区**(默认是--mixed: git reset --mixed HEAD file)
//移除没有被git管理的文件(n查看)(真正删除用f替换n)git clean -n //移除没有在.ignore中列举的git clean -n -X //只移除.ignore中列举的git clean -n -x //移除所有(包含.ignore中列举的)
git revert 一个代表commit点的对象 //产生新的提交覆盖原来的之间的提交,达到撤销以前的一个commit提交的目的git revert --abort //撤销操作
1. git commit --amend //产生一个新的提交, 替换当前指向的这个提交2. git rebase //历史修改能力, 帮助我们维护一个线性的历史3. git reset //刚刚创建了给合并的提交, 想撤销的这个合并的提交,让我们的历史看上去没有合并这个提交4. git reflog //维护了一个head引用的一个历史信息, 通常配合git reset来使用
//test_rebase分支上做错了, 需要回退git reflog //根据test_rebase上最后一个commit进行还原git reset --hard HEAD@{7} //--hard: 工作区和暂存区被历史还原,把head和分支名的引用指向我们这个commit //--mixed(默认) : 还原暂存区,把head和分支名的引用指向我们这个commit //--soft: 不还原, 把head和分支名的引用指向我们这个commit
远程协作
github.combash下:ssh-keygen -t rsa -C "xxxxxx@163.com"**********
eval `ssh-agent -s` eval "$(ssh-agent -s)" //win: `ssh-agent -s`
ssh-add ~/.ssh/id_rsa*********
cat ~/.ssh/id_rsa.pubvim ~/.ssh/id_rsa.pub例如:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUgpHqZm/MtbVFP4aOlEYVcfwG+ey2wxfv/lMMJN1ViGtBkUnz/9l+9XrVqiIbVg40Z3D2xvK3qIOoowlA2kyKUa1TBF+Tc3e66sECJxnCZarBz9G8FHLIhs07rJjhB5qo7mToLQl/p2oRyY3BeAyoflLh/SJLZEXxrBivn8YA5CGuZm9TCujv1IyasVn3WqbvoRENLAiqrKz5uyFzP43IsPajCBvxF80u+I89ynrKZYx2hqguC7QQ7aKXQUeriqfD+YvhuRMTBCt9xIuARJ9Caw8Di3jBiIIa5nZrX+vD1z9zsErqTETqpiJd2UtvIDc1fI9H2lEtAHqRwwHyqZrz xxxx@163.com
在github.com中setting中添加sshkey验证bash下:ssh -T git@github.com输入你刚才设置的密码, 出现你的账户成功授权了Hi portersLiu! You've successfully authenticated...
git clonegit fetch //拉取远程仓库数据git pull //获取最新数据,//git pull=>git fetch + git merge git push //如果push成功, 远程跟踪分支head会自动指向到跟踪分支最新的commit上
更新本地分支
git fecth origin
git fecth origin feacher
git pull origin feacher
git checkout -b [分支名] [远程分支]/[分支名] //如果你有 1.6.2 以上版本的 Git,还可以用 --track 选项简化:
git chckout --track origin/serverfix
git checkout -b sf origin/serverfix //在本地起个别名
git push [远程名] [本地分支]:[远程分支]
git push origin refs/heads/serverfix:refs/heads/serverfix
git push origin serverfix:serverfix
git push origin serverfix
把本地分支推送到某个命名不同的远程分支:若想把远程分支叫作 awesomebranch,可以用
git push orgin serverfix:awesonebranch
git branch -d feacher //删除本地分支
删除远程分支的方式
git push --delete origin feacher
另一种删除远程分支的方式 git push origin :feacher //git push [远程名] [本地分支]:[远程分支] 语法,如果省略 [本地分支],那就等于是在说“在这里提取空白然后把它变成[远程分支]”。
GitHub Pull Request流程
1. GitHub上fork项目2. git remote3. pull request
搜索别人的用户找到他的仓库点击Fork, 到了自己的仓库克隆下来一般新建功能分支承载我们的修改git checkout -b featurevim xxxgit add xxxgit commit -m "update xxx on feature"git push origin feature在master上创建pull request就是别人master分支与自己的feature分支的一个差异点击create pull request...
别人用户就可以看到
再次给别人这个项目pull request流程:git remote add upstream https://github.com/别人用户/xxxx.gitgit remote -vgit checkout mastergit fetch upstream //更新下来的是别人用户master上最新的代码git merge upstream/master //合并到我们master分支, 我们test和别人的test就一样了
git remote rename daydayup //改名git remote rm daydayup //删除
深入理解远程协作跟踪分支(tracking branch)与远程跟踪分支(remote tracking branch)的概念远程操作中的remote配置远程操作中的branch配置
建议使用git fetch,git merge或git rebase代替git pullgit diff master origin/master --查看结果决定是否使用merge或rebase操作
remote配置自己的团队:git remote set-branches --add origin qa/* cat ./git/config [remote "orgin"] fetch = +refs/heads/qa/*:refs/remotes/origin/qa/*
qa团队:配置git push origin master:qa/master或者 vim ./git/config [remote "orgin"] push = refs/heads/*:refs/heads/qa/*git push origin
git remote add fork https://github.com/别人用户/mytest.git cat ./git/config [remote "fork"] url = https://git.oschina.net/porters/tutorial.git fetch = +refs/heads/*:refs/remotes/fork/*
branch配置的作用如何配置branch第一种方式:git branch --set-upstream-to=origin/v0 v0 cat ./git/config [branch "v0"] remote = origin merge = refs/heads/v0第二种方式:git branch [--set-upstream | --track] v1 origin/v0 cat ./git/config [branch "v1"] remote = origin merge = refs/heads/v0第三种方式:git push -u origin v2 cat ./git/config [branch "v2"] remote = origin merge = refs/heads/v2第四种方式:git checkout v3 cat ./git/config [branch "v3"] remote = origin merge = refs/heads/v3第五种方式:git branch v4git config branch.v4.remote origin git config branch.v4.merge refs/heads/master cat ./git/config [branch "v4"] remote = origin merge = refs/heads/v4
转载于:https://www.cnblogs.com/liuzhipeng/p/7371575.html
相关资源:Git 命令学习文档(集合整理)