zoukankan      html  css  js  c++  java
  • git 经常使用操作集锦

     

    创建仓库

    新建普通仓库:

    jxdong@ubuntu-server:~/workspace/git$ git init 
    Reinitialized existing Git repository in /home/jxdong/workspace/git/.git/

    新建 bare 仓库:

    jxdong@ubuntu-server:~/workspace/git.git$ git init --bare 
    Initialized empty Git repository in /home/jxdong/workspace/git.git/

    bare 仓库里面不包括源码,仅仅具有版本号管理管理功能,无法运行 checkout 等代码管理操作:
    jxdong@ubuntu-server:~/workspace/git.git$ ls 
    branches  config  description  HEAD  hooks  info  objects  refs

    克隆仓库

    克隆普通 git 仓库:

    jxdong@ubuntu-server:~/workspace$ git clone git git_1
    Cloning into 'git_1'...
    done.
    warning: You appear to have cloned an empty repository.

    克隆为 bare 仓库:

    jxdong@ubuntu-server:~/workspace$ git clone git git_1.git --bare  
    Cloning into bare repository 'git_1.git'...
    done.
    warning: You appear to have cloned an empty repository.

    由于我们的仓库里面没有提交,所以 git 提示我们克隆了空的仓库

    提交代码

    第一次提交初始化的版本号能够是什么都没有:

    jxdong@ubuntu-server:~/workspace/git$ git commit -m "init: first version." --allow-empty
    [master (root-commit) 8a22ddf] init: first version.

    jxdong@ubuntu-server:~/workspace/git$ git log 
    commit 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:40:15 2014 +0800
        init: first version.

    加入项目文件

    jxdong@ubuntu-server:~/workspace/git$ echo test > myfile1.txt
    jxdong@ubuntu-server:~/workspace/git$ git add myfile1.txt

    提交到本地仓库


    jxdong@ubuntu-server:~/workspace/git$ git commit -m "work: add file1"
    [master 8ed6d03] work: add file1
    1 file changed, 1 insertion(+)
    create mode 100644 myfile1.txt

    查看历史


    jxdong@ubuntu-server:~/workspace/git$ git log 
    commit 8ed6d030278c0aef63052d6ba1946281c8a50ec8
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
    commit 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:40:15 2014 +0800
        init: first version.

    回退版本号

    作为提交的回退

    revert 会撤销一次 commit 并把撤销操作作为 commit 提交,所以历史里面包括这次撤销操作的 commit

    jxdong@ubuntu-server:~/workspace/git$ git log 
    commit 746d6596b7d5b84db9c27ceef1063be977510c4e
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:44:22 2014 +0800
        Revert "work: add file1"
        This reverts commit 8ed6d030278c0aef63052d6ba1946281c8a50ec8.
    commit 8ed6d030278c0aef63052d6ba1946281c8a50ec8
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
    commit 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:40:15 2014 +0800
        init: first version.
    jxdong@ubuntu-server:~/workspace/git$ ls

    强制删除一次提交

    reset 与 –hard 參数,将会真正去掉这次commit, 将会删除 git 历史。比較危急,用于那些失败的 提交。

    jxdong@ubuntu-server:~/workspace/git$ git reset --hard HEAD~1
    HEAD is now at 8ed6d03 work: add file1
    jxdong@ubuntu-server:~/workspace/git$ git log 
    commit 8ed6d030278c0aef63052d6ba1946281c8a50ec8
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
    commit 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:40:15 2014 +0800
        init: first version.
    jxdong@ubuntu-server:~/workspace/git$ ls 
    myfile1.txt

    改动提交历史

    我们再加入一个文件,并提交。

    jxdong@ubuntu-server:~/workspace/git$ echo test > myfile2.txt  
    jxdong@ubuntu-server:~/workspace/git$ git add myfile2.txt
    jxdong@ubuntu-server:~/workspace/git$ git commit -m "work: add file2"
    [master 021f89c] work: add file2
    1 file changed, 1 insertion(+)
    create mode 100644 myfile2.txt
    jxdong@ubuntu-server:~/workspace/git$ git log 
    commit 021f89cfd5aa195cd841eb0e64a2d712cc1f8356
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:45:49 2014 +0800
        work: add file2
    commit 8ed6d030278c0aef63052d6ba1946281c8a50ec8
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
    commit 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:40:15 2014 +0800
        init: first version.

    rebase 命令能够回退到指定的提交处,然后改动这次提交之后的历史。

    包括的功能:

    1. pick,採用这次提交,什么也不做
    2. reword,採用这次提交,仅仅是改动提交信息
    3. edit,採用提交,并停在这次提交这里,你能够開始改动这次提交
    4. squash,合并提交,将这次提交合并到之前的一次提交里面
    5. fixup,与squash 一致,直接合并忽略提交信息
    6. x,exec,运行一些命令

    这里以合并为例

    jxdong@ubuntu-server:~/workspace/git$ git rebase -i 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    pick 8ed6d03 work: add file1
    pick 021f89c work: add file2
    # Rebase 8a22ddf..021f89c onto 8a22ddf
    #
    # Commands:
    #  p, pick = use commit
    #  r, reword = use commit, but edit the commit message
    #  e, edit = use commit, but stop for amending
    #  s, squash = use commit, but meld into previous commit
    #  f, fixup = like "squash", but discard this commit's log message
    #  x, exec = run command (the rest of the line) using shell
    #
    # If you remove a line here THAT COMMIT WILL BE LOST.
    # However, if you remove everything, the rebase will be aborted.
    #

    ".git/rebase-merge/git-rebase-todo" 16L, 542C written                                 
    Rebasing (2/2)
    # This is a combination of 2 commits.
    # The first commit's message is:
    work: add file1
    # This is the 2nd commit message:
    work: add file2
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    # Not currently on any branch.
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #       new file:   myfile1.txt
    #       new file:   myfile2.txt
    #
                                                                                                                
    ~                                                                                                       
    ".git/COMMIT_EDITMSG" 18L, 438C written
    [detached HEAD a5d9008] work: add file1
    2 files changed, 2 insertions(+)
    create mode 100644 myfile1.txt
    create mode 100644 myfile2.txt
    Successfully rebased and updated refs/heads/master.

    看一下,合并后的历史
    jxdong@ubuntu-server:~/workspace/git$ git log 
    commit a5d9008e0d87302ed1dc9c5fa8957294efc3e403
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
        work: add file2
    commit 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:40:15 2014 +0800
        init: first version.

    生成补丁

    补丁的生成,-n 后面数字表示将要生成之前的多少次提交作为布丁。

    jxdong@ubuntu-server:~/workspace/git$ git format-patch -n1
    0001-work-add-file1.patch

    应用布丁

    应用布丁,须要具有同样祖先的 git 仓库,以避免错误,我们開始克隆过一个仓库,他们是来自同一个祖先

    jxdong@ubuntu-server:~/workspace/git$ cd ..
    jxdong@ubuntu-server:~/workspace$ cd git
    git/       git_1/     git_1.git/ git.git/   
    jxdong@ubuntu-server:~/workspace$ cd git_1
    git_1/     git_1.git/ 
    jxdong@ubuntu-server:~/workspace$ cd git_1
    jxdong@ubuntu-server:~/workspace/git_1$ git am ../git/0001-work-add-file1.patch
    Applying: work: add file1
    applying to an empty history

    获取远端仓库代码

    加入远端

    jxdong@ubuntu-server:~/workspace/git_1$ git remote add git ../git

    获代替码


    jxdong@ubuntu-server:~/workspace/git_1$ git fetch git 
    warning: no common commits
    remote: Counting objects: 5, done.
    remote: Compressing objects: 100% (3/3), done.
    remote: Total 5 (delta 0), reused 0 (delta 0)
    Unpacking objects: 100% (5/5), done.
    From ../git
    * [new branch]      master     -> git/master

    查看全部分支

    jxdong@ubuntu-server:~/workspace/git_1$ git branch -a
    * master
      remotes/git/master

    表示当前在本地的 master 分支,我们另一个远端叫 git 的仓库,里面包括一个 master 分支

    合并分支

    我们先在分支上再提交一次,这次也加入一个文件。

    jxdong@ubuntu-server:~/workspace/git_1$ echo test2 > myfile2.txt 
    jxdong@ubuntu-server:~/workspace/git_1$ git commit -m "work: modfy file2"
    # On branch master
    # Changes not staged for commit:
    #   (use "git add <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working directory)
    #
    #       modified:   myfile2.txt
    #
    no changes added to commit (use "git add" and/or "git commit -a")
    jxdong@ubuntu-server:~/workspace/git_1$ git commit -am "work: modfy file2"
    [master 503a6c9] work: modfy file2
    1 file changed, 1 insertion(+), 1 deletion(-)
    jxdong@ubuntu-server:~/workspace/git_1$ git log 
    commit 503a6c922a6a0f0fc298c1b5b8289fd2babb435c
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:50:30 2014 +0800
        work: modfy file2
    commit 24651eb534f5f4db86e61e62f48d7959aaaf4e65
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
        work: add file2

    合并分支

    jxdong@ubuntu-server:~/workspace/git_1$ git merge git/master 
    Auto-merging myfile2.txt
    CONFLICT (add/add): Merge conflict in myfile2.txt
    Automatic merge failed; fix conflicts and then commit the result.

    处理冲突

    首先查看冲突


    jxdong@ubuntu-server:~/workspace/git_1$ git diff
    diff --cc myfile2.txt
    index 180cf83,9daeafb..0000000
    --- a/myfile2.txt
    +++ b/myfile2.txt
    @@@ -1,1 -1,1 +1,5 @@@
    ++<<<<<<< HEAD
    +test2
    ++=======
    + test
    ++>>>>>>> git/master

    改动冲突并提交

    解决冲突主要是看须要保留本地的内容还是要合并的内容

    jxdong@ubuntu-server:~/workspace/git_1$ git commit -a
    Merge remote-tracking branch 'git/master'
    Conflicts:
            myfile2.txt
    #
    # It looks like you may be committing a merge.
    # If this is not correct, please remove the file
    #       .git/MERGE_HEAD
    # and try again.
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    # On branch master

    提交完毕合并成功  

    jxdong@ubuntu-server:~/workspace/git_1$ git log 
    commit d1feccc31ba37983e2d217ec7b497bffebdde3f1
    Merge: 503a6c9 a5d9008
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:56:46 2014 +0800
        Merge remote-tracking branch 'git/master'
        Conflicts:
            myfile2.txt
    commit 503a6c922a6a0f0fc298c1b5b8289fd2babb435c
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:50:30 2014 +0800
        work: modfy file2
    commit 24651eb534f5f4db86e61e62f48d7959aaaf4e65
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
        work: add file2
    commit a5d9008e0d87302ed1dc9c5fa8957294efc3e403
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
        work: add file2
    commit 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:40:15 2014 +0800

  • 相关阅读:
    vue自定义指令
    ZOJ Problem Set–2104 Let the Balloon Rise
    ZOJ Problem Set 3202 Secondprice Auction
    ZOJ Problem Set–1879 Jolly Jumpers
    ZOJ Problem Set–2405 Specialized FourDigit Numbers
    ZOJ Problem Set–1874 Primary Arithmetic
    ZOJ Problem Set–1970 All in All
    ZOJ Problem Set–1828 Fibonacci Numbers
    要怎么样调整状态呢
    ZOJ Problem Set–1951 Goldbach's Conjecture
  • 原文地址:https://www.cnblogs.com/blfshiye/p/3765739.html
Copyright © 2011-2022 走看看