User Tools

Site Tools


work:git-guide

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Last revisionBoth sides next revision
work:git-guide [2010/07/17 18:00] – created percywork:git-guide [2016/11/04 16:55] percy
Line 1: Line 1:
 ====== 收集一些git教程和常用命令 ====== ====== 收集一些git教程和常用命令 ======
 +
 +
 +
   - http://progit.org/book/zh/   - http://progit.org/book/zh/
 +
 +
 +
   - git 中文教程:http://www.bitsun.com/documents/gittutorcn.htm   - git 中文教程:http://www.bitsun.com/documents/gittutorcn.htm
 +
 +
 +
   - Git 原始碼管理:http://www.qweruiop.org/nchcrails/posts/49   - Git 原始碼管理:http://www.qweruiop.org/nchcrails/posts/49
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
  
  
Line 8: Line 32:
  
 ===== git常用命令速查 ===== ===== git常用命令速查 =====
 +
 +
 +
 <code> <code>
 +
 +
 +
 git init             # 開始用 Git 來管理 git init             # 開始用 Git 來管理
 +
 +
 +
 git add .            # 把所有檔案加入 Git git add .            # 把所有檔案加入 Git
 +
 +
 +
 git commit -a        # 做成一個版本 git commit -a        # 做成一個版本
 +
 +
 +
 git commit -a -m "your message here"  # commit 時直接寫訊息, 不用到下個螢幕上寫 git commit -a -m "your message here"  # commit 時直接寫訊息, 不用到下個螢幕上寫
 +
 +
 +
 git add mine.txt     # 把 mine.txt 加入管理 git add mine.txt     # 把 mine.txt 加入管理
 +
 +
 +
 git tag v0.02        # 本版別名取為 v0.02 git tag v0.02        # 本版別名取為 v0.02
 +
 +
 +
 git tag v0.03 40e3e  # 把版本 40e3e 取名為 v0.03; git tag v0.03 40e3e  # 把版本 40e3e 取名為 v0.03;
 +
 +
 +
 +
 +
 +
  
 git status           # 查詢從上個版本到現在哪些檔案被修改 git status           # 查詢從上個版本到現在哪些檔案被修改
 +
 +
 +
 git diff             # 查詢從上個版本到現在哪幾行被修改 git diff             # 查詢從上個版本到現在哪幾行被修改
 +
 +
 +
 git diff v0.01 v0.03 # 查詢兩個版本間的差異 git diff v0.01 v0.03 # 查詢兩個版本間的差異
 +
 +
 +
 git diff v0.01:story.txt v0.03:story.txt    # 查詢兩個版本間某個檔案的差異 git diff v0.01:story.txt v0.03:story.txt    # 查詢兩個版本間某個檔案的差異
 +
 +
 +
 +
 +
 +
  
 git log     # 查詢有史以來哪幾個檔案被修改 git log     # 查詢有史以來哪幾個檔案被修改
 +
 +
 +
 git log -p  # 查詢有史以來哪幾行被修改 git log -p  # 查詢有史以來哪幾行被修改
 +
 +
 +
 git log --stat --summary  # 查詢每個版本間變動的檔案跟行數 git log --stat --summary  # 查詢每個版本間變動的檔案跟行數
 +
 +
 +
 +
 +
 +
  
 git show v1.01            # 查詢 v1.01 版裡的修改內容 git show v1.01            # 查詢 v1.01 版裡的修改內容
 +
 +
 +
 git show v1.01:story.txt  # 叫出在 v1.01 版時的 story.txt 檔案 git show v1.01:story.txt  # 叫出在 v1.01 版時的 story.txt 檔案
 +
 +
 +
 git show v1.01:story.txt > test.txt   # 把 v1.01 版的 story.txt 抓出來,放入一個叫 test.txt 的檔案 git show v1.01:story.txt > test.txt   # 把 v1.01 版的 story.txt 抓出來,放入一個叫 test.txt 的檔案
 +
 +
 +
 git show HEAD             # 看此版本修改的資料 git show HEAD             # 看此版本修改的資料
 +
 +
 +
 git show HEAD^            # 看此版本前一版的修改的資料 git show HEAD^            # 看此版本前一版的修改的資料
 +
 +
 +
 git show HEAD^^           # 看此版本前前一版的修改的資料 git show HEAD^^           # 看此版本前前一版的修改的資料
 +
 +
 +
 git show HEAD~4           # 看此版本前前前前一版的修改的資料 >_< git show HEAD~4           # 看此版本前前前前一版的修改的資料 >_<
 +
 +
 +
 +
 +
 +
  
 git grep "貓" v0.01   # 查詢 0.01 版裡頭有沒有貓 git grep "貓" v0.01   # 查詢 0.01 版裡頭有沒有貓
 +
 +
 +
 git grep "熊"         # 查詢現在的版本裡有沒有熊 git grep "熊"         # 查詢現在的版本裡有沒有熊
 +
 +
 +
 +
 +
 +
  
 git branch 加英文版    # 建立新的分枝叫 "加英文版" git branch 加英文版    # 建立新的分枝叫 "加英文版"
 +
 +
 +
 git branch            # 查看現有的分枝 git branch            # 查看現有的分枝
 +
 +
 +
 git branch beta v0.5  # 依照 "v0.5" 版裡的內容來建立一個叫 "beta" 的分枝 git branch beta v0.5  # 依照 "v0.5" 版裡的內容來建立一個叫 "beta" 的分枝
 +
 +
 +
 git checkout 加英文版  # 換到 "加英文版" 的分枝上 git checkout 加英文版  # 換到 "加英文版" 的分枝上
 +
 +
 +
 git checkout master   # 換到主幹上 git checkout master   # 換到主幹上
 +
 +
 +
 git branch -d 加英文版 # 刪除 "加英文版" 分枝 git branch -d 加英文版 # 刪除 "加英文版" 分枝
 +
 +
 +
 +
 +
 +
  
 gitk    # 版本瀏覽軟體 gitk    # 版本瀏覽軟體
 +
 +
 +
 git gui # 瀏覽從上一版本到現在變動的地方; 沒辦法顯示中文 git gui # 瀏覽從上一版本到現在變動的地方; 沒辦法顯示中文
 +
 +
 +
 +
 +
 +
  
 git gc                # 維護 Git 的資料庫 git gc                # 維護 Git 的資料庫
 +
 +
 +
 git fsck --full       # 同上, 三不五時下次指令 git fsck --full       # 同上, 三不五時下次指令
 +
 +
 +
 +
 +
 +
  
 </code> </code>
Line 54: Line 207:
  
  
 +
 +
 +
 +
 +<code>
 +
 +
 +
 +git reset --soft HEAD^ #commit完后,发现有些文件改错了,或者没有add进去,用这个命令可以重新commit,添加comment.
 +
 +
 +
 +git push -f origin master#当用过reset后,重新commit,往上push的时候,可能会遇到
 +
 +
 +
 +                            #! [rejected]        master -> master (non-fast-forward),这个时候,如果确定没有冲突的话,可以加-f(force)强制push上去.
 +
 +
 +
 +
 +
 +
 +
 +git branch test tag#以某个tag生成branch,再用git checkout test,切换到那个branch.
 +
 +
 +
 +
 +
 +
 +
 +</code>
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +===== Github教程(转载) =====
 +
 +
 +
 +  - http://log.medcl.net/item/2010/03/git-quick-start/
 +
 +
 +
 +  - http://hi.baidu.com/kissdev/blog/item/944aa2fab2817215a8d311f1.html
 +
 +
 +
 +
 +
 +
 +
 +==== 创建和合并分支 ====
 +
 +
 +
 +<code>
 +
 +
 +
 +#git branch 显示当前分支是master
 +
 +
 +
 +#git branch new-feature  创建分支
 +
 +
 +
 +# git checkout new-feature 切换到新分支
 +
 +
 +
 +# vi page_cache.inc.php
 +
 +
 +
 +# git add page_cache.inc.php
 +
 +
 +
 +Commit 到本地GIT
 +
 +
 +
 +# git commit -a -m "added initial version of page cache"
 +
 +
 +
 +合并到远程服务器
 +
 +
 +
 +# git push origin new-feature
 +
 +
 +
 +
 +
 +
 +
 +如果new-feature分支成熟了,�
 +��得有必要合并进master
 +
 +
 +
 +#git checkout master
 +
 +
 +
 +#git merge new-feature
 +
 +
 +
 +#git branch
 +
 +
 +
 +#git push 
 +
 +
 +
 +则master中也合并了new-feature 的代码
 +
 +
 +
 +</code>
 +
 +
 +
 +==== 通过tag创建Branch,并提交 ====
 +
 +  git tag v1.0.0 2c1b73235f77e6204e0b584cfae692486ccf3e92
 +
 +  git branch leili-v1.0.0 v1.0.0
 +
 +  git checkout leili-v1.0.0
 +
 +  git push origin leili-v1.0.0
 +
 +
 +
 +
 +
 +==== 删除服务器branch ====
 +  git push origin  :server-branch-name
 +
 +==== git checkout remote branch ====
 +Check the remote branch list
 +  git branch -rv
 +Then create a local branch from the remote branch
 +  git checkout -b test origin/test
 +  
 +Commit to a remote branch:
 +  git push origin proguard
 +  
 +Reference:http://stackoverflow.com/questions/1783405/git-checkout-remote-branch
 +  
 +==== git add local to the remote  ====
 +<code>
 +git init
 +git remote add origin https://github.com/pjq/SoundRecordingExample2.git
 +git status
 +git pull
 +git pull origin master
 +git status
 +git add .
 +git commit -m "init commit"
 +git push origin master
 +</code>
 +
 +==== change url ====
 +  git remote set-url origin https://github.com/jikabao/merchantapp_android.git
 +
 +==== create patch ====
 +
 +  git show 3514997d38509ab5492e32afc3e4e872daf7932e >DashboardGLPLTitle.patch
 +  patch -p1  <DashboardGLPLTitle.patch
 +  
 +Or you can create patch between two commitid
 +  git diff old-commitid new-commitid >diff.patch
 +  git diff 557393295b0811278de4875d5fc5558988371bca 0abea5c74c10b81672817aa93ae21cc4852b7702 >diff.patch
 +  
 +If you want to revert your patch -R
 +  patch -R -p1 <../diff.patch
 +  
 + 
 +==== git auto-complete ====
 +
 +http://blog.jameschevalier.us/how-to-add-auto-completion-to-git/
 +
 +  wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash -O ~/.git-completion
 +  sudo vim /etc/bashrc
 +  source /Users/pengjianqing/.git-completion
 +  
 +==== git alias ====
 +  
 +http://git-scm.com/book/en/v1/Git-Basics-Tips-and-Tricks
 +  
 +<code BASH>
 +git config --global alias.co checkout
 +git config --global alias.br branch
 +git config --global alias.ci commit
 +git config --global alias.st status
 +git config --global alias.visual '!gitk'
 +</code>
 +
 +==== git tag ====
 +
 +<code>
 +   git tag release/1.2.9
 +   git tag -l
 +   git push origin tag release/1.2.9
 +  </code>
 +
 +==== git checkout tag ====
 +First make sure that the tag exists locally by doing
 +
 +  git fetch --tags
 +Then check out the tag by running
 +  git checkout tags/<tag_name>
 +  
 +Then create new branch base on the current commitment
 +  git branch newtagbranch
 +  
 +==== git fetch & git merge ====
 +
 +Refer to
 +  - http://www.ruanyifeng.com/blog/2014/06/git_remote.html
 +  - http://www.cnblogs.com/youxin/p/3470335.html
 +  - http://longair.net/blog/2009/04/16/git-fetch-and-merge/
 +
 +<code>
 +git checkout feature/sp_xd
 +git fetch origin feature/sp_xd:tmp
 +git diff tmp
 +git merge tmp
 +
 +git checkout feature/sp_xd
 +git fetch --all
 +git fetch origin feature/sp_xd
 +git diff feature/sp_xd origin/feature/sp_xd
 +git merge origin/feature/sp_xd
 +
 +git branch -D tmp
 +
 +git checkout feature/sp_xd
 +git fetch origin feature/sp_xd
 +git checkout -b newBrach origin/feature/sp_xd
 +
 +#Delete the local branch that already deleted from the remote
 +git remote prune origin
 +
 +#Remote server
 +git remote -v
 +
 +#Remote branch
 +git branch -r
 +#All branch
 +git branch -a
 +
 +#Show the remote repo information
 +git remote show origin
 +git remote prune origin
 +</code>
 +
 +==== git subtree ====
 +Refer to
 +http://blogs.atlassian.com/2013/05/alternatives-to-git-submodule-git-subtree/
 +<code bash>
 +git remote add -f datalayer   https://Jianqing.Peng@stash.englishtown.com/scm/mobile/datalayer-android.git 
 +git subtree add  --prefix=datalayer datalayer integration_lean --squash
 +git fetch all  --prune   
 +git fetch datalayer integration_lean
 +git subtree pull --prefix=datalayer/ datalayer integration_lean --squash
 +git subtree push --prefix=datalayer/ datalayer integration_lean
 +</code>
 +
 +
 +==== git checkout specified file from another branch ====
 +
 +  * http://stackoverflow.com/questions/2364147/how-to-get-just-one-file-from-another-branch
 +
 +  git checkout branch_name -- path/to/file
 +  
  
/var/www/dokuwiki/wiki/data/pages/work/git-guide.txt · Last modified: 2018/02/05 19:15 by percy