git 指令(git command [option] [reference])

来源:互联网 发布:adobe cloud mac 下载 编辑:程序博客网 时间:2024/05/16 05:19
1: git commit -m "description"   提交指令,description 是对本次提交的描述,不可以空缺。

2:git 上的操作 一般都是  git  + command + paramater  模式 command  代表的是操作类型,命令类型,paramater 则描述如何去操作,操作的对象名之类的。比如 

3:branch 相关的操作
1)    git  branch -a             表示查看所有(本地和远端)分支
2)    git branch  test         表示新建本地分支 test
3)    git  checkout test        表示切换到 test 分支 (git checkout  -b  new_branch_name  branch_name :这条指令是明确指出从哪个分新建分支,从 branch_name 创建分支到 new_branch_name
4)    git  branch -d test        表示删除分支 test


插入checkout 指令
    1) git checkout  -b  new_branch_name   branch_name 
    (也可以用 git checkout  branch_name   -b  new_branch_name   )注意: -b 后所跟为新建的 branch_name,这句话要做一个整体,可以与 branch_name 调换。

          这条指令表示从名叫 branch_name 的分支新建分支 new_branch_name ,然后切换到新建分支,如果    
         branch_name  分支是远程分支新建分支会 自动track 该分支。
          如果省略 branch_name 参数,则代表从当前分支新建。 

    2)git checkout -b  new_branch_name  
         与 1)相比省略 branch_name 参数,则代表从当前分支新建 new_branch_name 分支

  3)git  checkout   --track  orgin/branch_name
        这条指令就是明确指出从远程 branch_name 分支在本地创建同名分支,并且跟踪该分支

注:任何从远程分支分出来的分支都会自动跟踪远程分支。

   4)git  checkout   branch_name
         与 2)相比省略  -b  参数,则代表从当前分支切换 branch_name,如果分支不存在报错

 

4:commit 相关操作
1)   如果在某个分支里新建了而一个文件夹,我们需要先把该文件夹添加入分支  git add folder_name 之后才可以提交该文件夹里的文件。

2) 在提交的时候,有时候显示 Utracked file ,表示这些文件需要重新提交,但是没有加入提交列表,导致没有提交。解决办法是: 利用 git add file_name  或者 git add folder_name ,来把该些项加入提交列表。然后再 git commit -m  "description"  提交它们。

3) 在 2)中的方法可以用来解决以前某种文件被忽视,但是后面重新需要加入,这时候就需要先修改 ignore 文件,然后再调用 git add 来把该些 untracked(需要被跟踪,但是没有被跟踪) 文件加入 tracked 列表(被跟踪文件,这些文件改动了,就会被指出,然后可以提交)。然后可以 git commit 

5: 关于如何把已经上传到 repository 某类文件或者某类文件夹删除

    用 .ignore 文件只能保证后续的上传不会 commit 某类文件或者文件夹,但是不可以把之前已经上传到 repository 的东西删除,只能通过 
git  filter-branch  --tree-filter 'git rm -rf --ignore-unmatch *.exe'  HEAD 

这样表示能把所有的 exe 文件从整个 commit 历史中删除,重写 commit 历史。因为 HEAD 表示从头开始执行(也可以用其他的参数,表示范围执行(从某次提交到某次提交))
然后再去 ignore 文件中加一句 *.exe 这样就可以保证后续 commit 不会上传 exe 文件。

可以去这个博客看看
http://dalibornasevic.com/posts/2-permanently-remove-files-and-folders-from-a-git-repository

总结:
     1) 首先用
    git filter-branch --tree-filter 'git rm -r -f --ignore-unmatch filename'  HEAD
           a)  重写整个分支的 commit ,移除所有 filename 类型文件。
            b)也可以不用 HEAD ,而改用其他的参数来指定某些 commit
            c) 有时候可以强加 -f 
            git filter-branch  -f --tree-filter 'git rm -r -f --ignore-unmatch filename'  HEAD,        这样可以强制执行。

    2) 完成 1)中的 之后,只是找到了要移除的文件或者文件夹,一定要用:
       git push  origin  branch_name --force 
        把以上找到的改变写入 该分支,才能够把 以上文件从 repository 中删除
        感觉是从本地 refs 中修改某些参数后,然后依照 refs 重新从本地上传所有文件。

        感觉就是只要修改了 refs ,然后重新上传就可以改变历史 commit (整个重新 commit ),大动干戈。
        git filter-branch --tree-filter '    '    就是一个可以改变 refs 命令。

6:  关于 git  filter-branch --tree-filter ' filter rule' filter_rage 
w         filter-branch : 是指过滤分支中某些内容
           --tree-filter   :  用什么过滤器过滤(这里是--tree-filter)(打个比方,大漏斗,小漏斗)
           ‘filter rule'     : 用什么规则过滤(其实是过滤哪些文件和文件夹)(打个比方,孔径不同的滤纸)
           filter_range  : 分支中过滤范围    (HEAD 表示从头开始)

7:git push --set-upstream orgin-name  brach-name
该条指令是设置本地的名为 branch-name 的分支上传到 github 上的 origin-name 的分支上。


8:pull request 

是用来把自己之前在 fork 某个 github 上的仓库(resposA) 后(其实就是把整个工程文件拷贝过来),然后在自己的仓库中就会多一个新的库(responsB),然后自己在上面修改一些东西,创建分支,或者干嘛干嘛,最后想要把改动提交到原始仓库中,就得 pull request ,向仓库持有者提交申请。
举例:比如你自己在 git hub上有一个仓库 A,你自己在电脑上个 fork 了一个仓库 B,自己做了一些改动,最后想要提交,就要通过这个去完成。
注意:这个和你自己从git hub 上 pull 下来的和push 上去的不一样,你可能在 git hub 上有仓库 B ,你每次完成一部分,可能都会去 push 上去,同时你在家里电脑上也有这个仓库,回家想继续修改,你就可以 pull 之前的改动,这个 git hub 上的B只是用来备份用(一般情况,感觉和云差不多)。

9 :如何把本地新建的分支同步到远程:
git push --set-upstream origin branch_name
这样就可以把本地新建的分支推送到 git hub 库中去,如果原来没有 branch_name,就会多出一个 branch_name 新分支。


10push 
  一:用push来指定某个分支推送到目标分支
      1)git push https://github.com/Zimuge/helloworld.git  branch_1 branch_2
         这一句就是不管当前在哪个分支,都可以指定把当前库中 branch_1 上传到 https://github.com/Zimuge/helloworld.git  (是一个库的地址上的 branch_2 ,但是对 branch_1 有一定的要求(具体还不知道,囧,当然肯定得存在啦), 如果该库中没有 branch_2 就会新建 branch_2。

      2)git push  https://github.com/Zimuge/helloworld.git   branch_name(这一句可以用来在远程创建同名分支
     这一句话就是指明从当前库中 branch_name 分支(这个分支一定得存在向远程 https://github.com/Zimuge/helloworld.git  库中的分支 branch_name 推送(就是在 1)基础上省略了 : branch_name,因为两个分支同名)。如果库中不存在该分支,那么就新建该分支。如果本地不存在则报错。

    3)另外在本地库同步到远程库中时,为了避免一直输入上述的 http,可以,不过该库一定得先创建好。
            git remote add origin https://github.com/Zimuge/helloworld.git
           这样就可以每次操作 origin 来代替 https://github.com/Zimuge/helloworld.git
      这样就是把本地库远程库绑定到一起了。两个库无需同名

二:用push来指定某个分支跟踪目标分支
    1git push --set-upsteam https://github.com/Zimuge/helloworld.git  branch_1:branch_2
     这句话就是不管当前在哪个分支为 一个已经存在的分支 branch_1 设置跟踪对象                                    为 https://github.com/Zimuge/helloworld.git  库的 branch_2 分支,果 https://github.com/Zimuge/helloworld.git  库中
  没有分支 branch_2,则新建该分支。这个和 1) 中的指令相似
     由 3)中可知,可以用 origin 代替 https://github.com/Zimuge/helloworld.git 。

  2git push --set-upsteam  https://github.com/Zimuge/helloworld.git  branch_name (这一句可以用来在远程创建同名分支
        这句就是指示把当前库中的 branch_name 分支设置成跟踪  https://github.com/Zimuge/helloworld.git  中的同名 branch_name
        (相对比与 4) 其实就是少了一个 :branch_name,因为同名),如果本地库不存在 branch_name 分支,报错, 如果远程库中不存在,就创建一个该分支。    这一点与 2) 中描述的相似。

  3git push     
      如果只有 git push 那么只有当前分支跟踪了同名的远程分支时,这句话才可以执行。如过没跟踪远程同名分支,(即存在同名分支,但是跟踪了一个非同名分支)或者没有同名远程分支,那么只能老老实实指明上传目标地点。其实这个语句是推送所有的分支到其同名分支上去,一般只有你把所有分支工作做完了,才会这样去做,在修改单分支时,建议不要这样去做,因为这样如果是做的开源项目,那么你所做的没有完成的工作影响他人

      其实这样的话你可以将本地库中的一个分支推送到任何一个 远程的库中(利用 https://github.com/Zimuge/helloworld.git)

三:用push来删除远程的无效分支
     git  push -d  origin branch_name 



11pull 0
pull 指令和 push 其实类似。同样有指定源拉取(就是指定库和分支拉取)

1)git pull  https://github.com/Zimuge/helloworld.git  branch_1:branch_2 
      从远程的库中拉取,从库中 branch_1 拉取到本地的 分支 branch_2,如果本地不存在 branch_2 ,在本地新建该分支。如果不存在 branch_1 则报错。

12:checkout
checkout 指令可以用来切换以前的版本,并且可以使得目前的工作目录(中所有文件,或者单个文件)和之前的旧版本保持一致,可以对他进行编辑修改,而这一切都不会影响当前的仓库状态

13:git revert  / git reset
git  revert 是撤销某次的提交所引起的更该,然后重新提交一次,所以以前的某次错误提交仍然还是在提交历史中的。与之相对的是 git reset ,这是一个会撤销删除以前提交历史的命令,属于有安全隐患的命令

14:git reset
git reset  <file>用来把某个文件移除缓存区。
git reset --hard <commit> 用来把某次提交删除。
git reset --hard HEAD~n  用来把当前提交的前 n 次条全部删除掉。

15:






0 0