1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

>基本git 工作流程

Last updated at Posted at 2013-02-24

===================

  • 基本
    • 初始化git
    • 檢查你的狀況
    • 新增檔案
    • Staging Area
    • 儲存快照
    • 翻看快照記錄
  • 分支
    • 開啟新分支和進入
    • 在分支上修改檔案
    • 在分支上快拍照
    • 在分支上的快照記錄
    • 合拼分支改變
  • 互聯網
    • 上傳到伺服器
    • 從伺服器合併改變
  • PS
    • Tracking Information

#基本


初始化git

  1. 進入你電腦某個資料夾
  2. git init初始化這個夾為git folder
		➜  Desktop  mkdir git_example
		➜  Desktop  cd git_example
		➜  git_example  git init
		Initialized empty Git repository in /Users/jason/Desktop/git_example/.git/

檢查你的狀況

  1. 輸入指令:git status
  2. 顯示你現在的分支位置on branch xxx
  3. master 是git預設的分支
	    ➜  git_example git:(master) git status
	    # On branch master
	    #
	    # Initial commit
	    #
	    nothing to commit (create/copy files and use "git add" to track)

新增檔案

  1. 新增jason.html
  2. 檢查git status
		➜  git_example git:(master) touch jason.html
		➜  git_example git:(master) ✗ git status
		# On branch new_feature
		#
		# Initial commit
		#
		# Untracked files:
		#   (use "git add <file>..." to include in what will be committed)
		#
		#	jason.html
		nothing added to commit but untracked files present (use "git add" to track)

每一次你新增或改變檔案, git 不會自動幫你儲存變化
直至你輸入git add 令檔案進入staging area
在一下次commit時, git才會幫你記錄這些變化

Staging Area

  1. 利用git add . 新增jason.html 入staging area
  2. 檢查git status
  3. 顯示在下次你commit 時的動作
		➜  git_example git:(master) ✗ git add .
		➜  git_example git:(master) ✗ git status
		# On branch new_feature
		#
		# Initial commit
		#
		# Changes to be committed:
		#   (use "git rm --cached <file>..." to unstage)
		#
		#	new file:   jason.html
		#
```


儲存快照
----

1. `git commit -m "add jason.html"`
2. 讓git為我們的檔案拍快照(記錄變化)

		➜  git_example git:(master) ✗ git commit -m "add jason.html"
		[master (root-commit) 3da7049] add jason.html
		 0 files changed
		 create mode 100644 jason.html
		➜  git_example git:(master) git status
		# On branch master
		nothing to commit (working directory clean)


翻看快照記錄
----
1. `git log`
2. 顯示快照記錄

		commit 3da704936d1034edf5adcf167213ea11e2e01362
		Author: Liu Ho Yin <j-lhy@hotmail.com>
		Date:   Thu Jan 17 22:50:29 2013 +0800
		
		    add jason.html

 

 
>#進階(分支)
----

開啟新分支和進入
----
1. 輸入指令 `git checkout-b  'edit_jason'`
2. 會創造和進入新分支 `new_feature` 
	

		➜  git_example git:(master) git checkout -b 'edit_jason'
		Switched to a new branch 'edit_jason'
		
		
在分支上修改檔案
-----------------------

1. vim jason.html as you want
2. `git status` 檢查將況

		➜  git_example git:(edit_jason) vim jason.html 
		➜  git_example git:(edit_jason) ✗ git status                  
		# On branch edit_jason
		# 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:   jason.html
		#
		no changes added to commit (use "git add" and/or "git commit -a")

	
	即使你是修改檔案
	
	你也需要輸入`git add` 令檔案進入`staging area`
	
	在一下次commit時, git才會幫你記錄修改
	

在分支上快拍照
-----------------------

1. `git add .` stage 修改動作
2. 再一次檢查狀況	
3. 拍快照

		➜  git_example git:(edit_jason) ✗ git add . 
		➜  git_example git:(edit_jason) ✗ git status
		# On branch edit_jason
		# Changes to be committed:
		#   (use "git reset HEAD <file>..." to unstage)
		#
		#	modified:   jason.html
		#
		➜  git_example git:(edit_jason) ✗ git commit -m "edit jason.html"
		[edit_jason 2351506] edit jason.html
		 1 file changed, 1 insertion(+)
		 
在分支上的快照記錄
----
1. `git log` 查看快照記錄
2. 比剛才在master多了我們的修改動作

	
		commit 2351506e70926dd3ba46aee4c9d78b0dcc28fef3
		Author: Liu Ho Yin <j-lhy@hotmail.com>
		Date:   Thu Jan 17 22:56:51 2013 +0800
		
		    edit jason.html
		
		commit 3da704936d1034edf5adcf167213ea11e2e01362
		Author: Liu Ho Yin <j-lhy@hotmail.com>
		Date:   Thu Jan 17 22:50:29 2013 +0800
		
		    add jason.html

合拼分支改變
----
到目前為止, 我們所做的改變只是在新分支`edit_jason`

現在合拼這些改變到預設分支`master`

1. `git checkout master`
2. 去我們想要的分支:master
3. `git merge edit_jason`
4. 將分支`edit_jason`的改變合併到現在的分支(即是master)

		➜  git_example git:(edit_jason) git checkout master
		Switched to branch 'master'
		➜  git_example git:(master) git merge edit_jason 
		Updating 3da7049..2351506
		Fast-forward
		 jason.html |    1 +
		 1 file changed, 1 insertion(+)
		 
	現在我們在分支master, 再一次 `git log `
	你會看見我們在`edit_jason`的快照
	
		➜  git_example git:(master) git log                        
		
		commit 2351506e70926dd3ba46aee4c9d78b0dcc28fef3
		Author: Liu Ho Yin <j-lhy@hotmail.com>
		Date:   Thu Jan 17 22:56:51 2013 +0800
		
		    edit jason.html
		
		commit 3da704936d1034edf5adcf167213ea11e2e01362
		Author: Liu Ho Yin <j-lhy@hotmail.com>
		Date:   Thu Jan 17 22:50:29 2013 +0800
		
		    add jason.html




>#互聯網
----

上傳到伺服器
----

1. `git remote add origin <server.git>`(第一次)
2. 新增remote 叫orign
3. `git push -u origin master`
4. 上傳到origin 的master 分支

		➜  git_example git:(master) git remote add origin git@github.com:Jasonlhy/git_example.git
		Counting objects: 6, done.
		Delta compression using up to 4 threads.
		Compressing objects: 100% (2/2), done.
		Writing objects: 100% (6/6), 442 bytes, done.
		Total 6 (delta 0), reused 0 (delta 0)
		To git@github.com:Jasonlhy/git_example.git
		 * [new branch]      master -> master
		Branch master set up to track remote branch master from origin.


從伺服器合併改變
----

剛剛在github 上新增了README,現在把它拉回來

1. `git pull`
2. 從origin 拉README.md 下來

		remote: Counting objects: 4, done.
		remote: Compressing objects: 100% (2/2), done.
		remote: Total 3 (delta 0), reused 0 (delta 0)
		Unpacking objects: 100% (3/3), done.
		From github.com:Jasonlhy/git_example
		   2351506..d8a6c01  master     -> origin/master
		Updating 2351506..d8a6c01
		Fast-forward
		 README.md |    4 ++++
		 1 file changed, 4 insertions(+)
		 create mode 100644 README.md
		 
	現在你檔案裡會多了一個README.md 的檔案,很神奇吧

		➜  git_example git:(master) ls      
		README.md  jason.html



>PS
====

-Tracking Information
====

##### -u

在git push 中`-u`, 會建立**tracking infromation**, 用來連結你本地分支和伺服分支的關係。因此,在下一次git push or git pull, 你不用再聲明那個伺服器,那個分支

你在某些地方使用`git clone`,都會留有tracking information


##### 但是
如果你使用的是`git push origin master`,沒有留下tracking information
>
pull時你便要聲明伺服和分支

	`git pull origin master` 

或建立tracking information 

	`git branch --set-upstream origin/xxxxx`
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?