整理一些Git的命令

本地操作


 

Git Book -

参考资料: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

 以及极客学院的资料


Linux下安装:

--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下安装了哪些版本的git
git --version                          // 查看git的版本

git-scm.som                          // 从官网下载安装包,并安装

vim .bash_profile                        // linux下不同好像是.bash_rc
  export PATH=/usr/local/git/bin:$PATH
source .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 checkout
git config --global alias.br branch
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.lol "log --oneline"

 git config --global alias.lol "log --oneline --decorate --graph --all --date-order

"

--git中的四种对象
1 blob
2 tree
3 commit
4 tag

 


 

1. git init
2. git clone
git 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 -s
4. 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 --tags

3. 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 log
3. git diff

 

git show 6fa315a
git show master
git show HEAD

git show HEAD~         git show HEAD~~    git show HEAD~2
git show master~     git show master~~   git show master~2

git show HEAD^    git show HEAD^^     git show HEAD^2
git 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 log
git log -p
git log --stat
git log --oneline
git log --oneline --decorate --graph --all

git diff HEAD~2 -- master.txt
git diff --cached HEAD~2
git diff HEAD HEAD~2
git diff HEAD HEAD~2 -- master.txt
git diff --color-words
git 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.com
bash下:
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.pub
vim ~/.ssh/id_rsa.pub
例如:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUgpHqZm/MtbVFP4aOlEYVcfwG+ey2wxfv/lMMJN1V
iGtBkUnz/9l+9XrVqiIbVg40Z3D2xvK3qIOoowlA2kyKUa1TBF+Tc3e66sECJxnCZarBz9G8FHLIhs07
rJjhB5qo7mToLQl/p2oRyY3BeAyoflLh/SJLZEXxrBivn8YA5CGuZm9TCujv1IyasVn3WqbvoRENLAiq
rKz5uyFzP43IsPajCBvxF80u+I89ynrKZYx2hqguC7QQ7aKXQUeriqfD+YvhuRMTBCt9xIuARJ9Caw8D
i3jBiIIa5nZrX+vD1z9zsErqTETqpiJd2UtvIDc1fI9H2lEtAHqRwwHyqZrz xxxx@163.com

在github.com中setting中添加sshkey
验证bash下:
ssh -T git@github.com
输入你刚才设置的密码, 出现你的账户成功授权了
Hi portersLiu! You've successfully authenticated...

 

git clone
git 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 remote
3. pull request

 

搜索别人的用户
找到他的仓库
点击Fork, 到了自己的仓库
克隆下来
一般新建功能分支承载我们的修改
git checkout -b feature
vim xxx
git add xxx
git 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.git
git remote -v
git checkout master
git 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 pull
git 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 v4
git 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值