整理一些Git的命令

mac2022-06-30  17

本地操作


 

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下安装了哪些版本的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 --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 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 命令学习文档(集合整理)
最新回复(0)